PHP:如何从JSON文件中获取值?

时间:2014-02-22 03:27:16

标签: php json

我正在使用PHP和json_decode来使用远程API,而我遇到了一个新手问题,我甚至不知道该搜索什么来找到我的答案。

所以在我的脚本上我有一个$ code = 392和一个简化版本的json文件:

{
    "result": {
        "items": [
            {
                "name": "New York",
                "code": 7294,
            },
            {
                "name": "Miami",
                "code": 392,
            },
            {
                "name": "Los Angeles",
                "code": 9182,
            }
        ]
    }
}

所以,简单地说,拥有代码392我想知道哪个名称对应于该代码。怎么样 ? (实际的json结果有数千个“项目”,如果这有所不同)

4 个答案:

答案 0 :(得分:1)

首先,您应该解码您的json数据,如:

// will decode json data as assoc array
$data = json_decode($json_data, true);

然后,您可以在此数组中获取值,如:

$item01 = $data['result']['items'][0];
$name   = $item01['name']; // New York
$code   = $item01['code']; // 7294

或者

// will decode json data as object
$data = json_decode($json_data);

$item01 = $data->result->items[0];
$name   = $item01->name; // New York
$code   = $item01->code; // 7294

答案 1 :(得分:0)

您可以遍历JSON对象的items中的result,并检查与所需代码和每个项目代码的相等性。以下是将其实现为函数的方法。

function getNameFromCode($json, $code) {
    foreach ($json['result']['items'] as $item)
        if ($item['code'] == $code)
           return $item['name'];

    // return false if the code wasn't found.
    return false;
}

// assume this is the JSON string of your example.
$json_string = "...";

// pass true as the second argument to get an associative array.
$json = json_decode($json_string, true);

// should return "Los Angeles".
$name = getNameFromCode($json, 9182);

foreach() 上的文件。

答案 2 :(得分:0)

foreach( json_decode($my_json_string) as $key => $item)
      if ( $item['code'] === $code ) { $name = $item[name]; break; }

答案 3 :(得分:0)

您可以将JSON转换为PHP对象,并使用foreach循环遍历项目。

function getNameByCode($phpobj, $code){
    if( isset($phpobj->result) ){
        if( isset($phpobj->result->items) 
            && is_array($phpobj->result->items) ){
            foreach($phpobj->result->items as $item){
                if( $item->code == $code ){
                    return $item->name;
                }
            }
        }
    }
    return false;
}//end function

您可以使用此功能进行测试... 注意:删除尾随逗号,如评论 rjdown 所示

$json = '{
"result":     {
    "items": [
                {
                    "name": "New York",
                    "code": 7294
                },
                {
                    "name": "Miami",
                    "code": 392
                },
                {
                    "name": "Los Angeles",
                    "code": 9182
                }
            ]
            }
        }';
$phpobj = json_decode($json); 

$name = getNameByCode($phpobj, "7294");
echo $name;