3

json 出力からアイテムを取得する必要がありますが、json の内容は常に一貫しているわけではありません。

たとえば、「名前」の値を取得したい場合は、次のようになります['result']['attributes'][0]['name'];

しかし、json が 2 番目の例として配信される場合は、次のようになります。['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"}
    ]
}}

それが入っている配列のインデックスが不明な場合、「名前」の値を取得するにはどうすればよいですか?

4

2 に答える 2

3
var arr = obj.result.attributes;
for (var i=0; i<arr.length; i++)
    if ("name" in arr[i])
         return arr[i].name;

または、それが常に配列内の2つのオブジェクトのみである場合:

 var attrs = obj.result.attributes;
 return attrs["name" in attrs[0] ? 0 : 1].name;

しかし、私はそのAPIの変更を主張します、2つのオブジェクトはちょうどマージされるべきです。


編集:申し訳ありませんが、ここにPHPがあります:

$attrs = json_decode($jsonStr, true)["result"]["attributes"];
return $attrs[ isset($attrs[0]["name"]) ? 0 : 1 ];
于 2012-06-06T05:20:45.757 に答える
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
于 2012-06-06T05:29:33.537 に答える