PHP如何快速取出JSON的指定键值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP如何快速取出JSON的指定键值?相关的知识,希望对你有一定的参考价值。
比如'a':'1','b':'2','c':'3','a':'4','b':'5','c':'6','a':'7','b':'8','c':'9'
取出条件a=1的c值,我只想到用for循环判断a=1时再取出c,有没有更方便快捷的办法呢?
$arr = json_decode($json_str , true);
foreach($arr as $v)
if($v['a'] == 1)
echo $v['c'];
参考技术A <?php
$json_str = '["a":1,"b":2,"c":3,"a":4,"b":5,"c":6,"a":7,"b":8,"c":9]';
$arr = json_decode($json_str , true);
/**
** $json_str json字符串
** $limit 限制条件数组 如:$limit=array('a','==1');
** $key 返回的键值
**/
function getValueByKey($json_str,$limit=array(),$key)
$arr=json_decode($json_str,true);
foreach($arr as $v)
if($v[$limit[0]].$limit[1])
return $v[$key];
$data=getValueByKey($json_str,array('a','==1'),'c');
?> 参考技术B 这种方法可以做到,但是不知道速度上会不会更快,没有测试速度,但是不需要循环了
缺点是只能取出一个a=1时的c的值,如果数组里有多个a=1的话,只能取到第一个,另一个缺点是数据格式必须是你给出这种格式的:'a':'1','b':'2','c':'3', 也就是key a和key c之间必须要还有一个key 才行。不过如果数组里的数据很多的话,感觉这种应该会比循环快。如果数据少的话还是循环更稳一点,不会有太多问题
$str = "'a':'1','b':'2','c':'3','a':'4','b':'5','c':'6','a':'7','b':'8','c':'9'";
$temp = explode("'a':'1',",$str);
if(count($temp)>1)
$temp2 = explode(",",$temp[1]);
$temp3 = explode(":'", $temp2[1]);
$result = explode("'",$temp3[1]);
echo $result[0];
else
echo "不存在a=1";
追问
感谢你的回答,不过成员个数不定而且a,c之间不一定有b,好像还是for稳定兼容好些
如何在没有“键值”对格式的情况下快速发送 json 对象
【中文标题】如何在没有“键值”对格式的情况下快速发送 json 对象【英文标题】:How to send json object in swift without "key - value" pair format 【发布时间】:2015-03-04 03:51:34 【问题描述】:嘿,所以我必须向 Django 服务器发送一个令牌字符串,它只接受一个字符串。我正在尝试使用 alamo fire 来执行此操作,但是我无法发送键值对来解决此问题。是否有替代解决方案。我是新的 IOS 开发人员,这是我的第一个项目,也是社区的新手。谢谢。
【问题讨论】:
您能详细说明您需要发送到 Django-server 的内容吗?从它的声音来看,您尝试发送的并不是真正的 json,除非它是 url 编码或类似的东西...... 我需要向服务器发送一个令牌,例如“189E23FL2”。 【参考方案1】:将您的字典转换为 JSON 字符串并以这种方式发送:
func jsonStringify(data: AnyObject) -> NSData?
var error: NSError?
if let json = NSJSONSerialization.dataWithJSONObject(
data,
options: NSJSONWritingOptions(0),
error: &error
)
return json
else
return nil
【讨论】:
【参考方案2】:根据如何您需要发送令牌(POST vs GET vs HTTP Body vs Query String)...您可能需要更改以下内容。但它应该让你开始使用NSURLSession
。这会将令牌 189E23FL2
发送到服务器,并使用 POST 作为 HTTP 正文参数。
let url = NSURL(string: "http://some-server/endpoint")
var request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.HTTPBody = "189E23FL2".dataUsingEncoding(NSUTF8StringEncoding)
// if you need a csrf token, add something like this as well:
// request.addValue("the-csrf-token", forHTTPHeaderField: "X-CSRFToken")
var sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
var session = NSURLSession(configuration: sessionConfiguration)
var task = session.dataTaskWithRequest(request, completionHandler: (data : NSData!, response : NSURLResponse!, error : NSError!) -> Void in
if (error == nil)
println("Done!")
else
println("Errorororororor")
)
// start the task
task.resume()
【讨论】:
执行此操作时,我从服务器收到以下消息:“详细信息”:“CSRF 失败:CSRF 令牌丢失或不正确。”使用实际服务器网站上的字段以及 Postman,如果我以以下格式发送令牌 - >“令牌”,它会成功将我注销。我不知道为什么它不接受你写的东西,这对我来说似乎是最合乎逻辑的。 CSRF 错误与跨站点请求伪造有关。由于直接使用该网站,它在同一 origin 上,它不会抱怨。但在 iOS 应用程序中,您还必须发送 CSRF 令牌。类似于:request.addValue("the-csrf-token", forHTTPHeaderField: "X-CSRFToken")以上是关于PHP如何快速取出JSON的指定键值?的主要内容,如果未能解决你的问题,请参考以下文章
如何把一个Dictionary对象的键值都取出来,然后拼接到一起,达到string str=key1+value1+key2+value2+··