我需要从json输出中获取一个项目,但json内容并不总是一致的。
例如,如果我想获取“name”的值,那么它将是['result']['attributes'][0]['name'];
但是如果json作为第二个例子传递,它将是['result']['attributes'][1]['name'];
{"result":{
"attributes":[
{"user":"newb","name":"mike"},
{"state":"california","city":"los angeles"}
]
}}
{"result":{
"attributes":[
{"state":"california","city":"los angeles"},
{"user":"newb","name":"mike"}
]
}}
如果它所在的数组的索引未知,我将如何获得“name”值?
答案 0 :(得分:3)
var arr = obj.result.attributes;
for (var i=0; i<arr.length; i++)
if ("name" in arr[i])
return arr[i].name;
或者,如果它始终只是数组中的两个对象:
var attrs = obj.result.attributes;
return attrs["name" in attrs[0] ? 0 : 1].name;
但是我会坚持改变那个api,两个对象应该合并。
$attrs = json_decode($jsonStr, true)["result"]["attributes"];
return $attrs[ isset($attrs[0]["name"]) ? 0 : 1 ];
答案 1 :(得分:1)
这会将索引返回到包含attributes
属性name
的对象的"mike"
数组中。
function extractNameFromJson($json) {
foreach ($json->result->attributes as $i => $attribute) {
if (isset($attribute['name']) && $attribute['name'] == 'mike') {
return $i;
}
}
}
$index = extractNameFromJson($json);
echo $json->result->attributes[$index]['user'];
==> newb