php json decode - 获取一个值

时间:2010-06-19 18:10:26

标签: php json

我正在尝试从json内容中提取特定值。这里是与json代码http://www.ebayclassifieds.com/m/AreaSearch?jsoncallback=json&lat=41.1131514&lng=-74.0437521的链接。您可能会看到显示的代码是

json({items:[{url:"http://fairfield.ebayclassifieds.com/",name:"Fairfield"},{url:"http://newyork.ebayclassifieds.com/",name:"New York City"}],error:null}); 
我需要提取第一个URL,在这种情况下是“http://fairfield.ebayclassifieds.com/”,它的名称值是“Fairfield”,我可以用正则表达式做,但我更喜欢使用json_decode。不幸的是,当我尝试解码时,它不起作用

$json  = getContent("http://www.ebayclassifieds.com/m/AreaSearch?jsoncallback=json&lat=41.1131514&lng=-74.0437521");
$test = json_decode($json, true);

2 个答案:

答案 0 :(得分:2)

正如danp所说,返回的JSON包含在函数调用中(由jsoncallback=json指定)。你不能完全摆脱这一点,但是,只需使用AreaSearch?jsoncallback=&lat=41.1131514&lng=-74.0437521删除字符串开头的至少json,你就可以删除括号:

$json = trim(trim($json), "();");

with give:

{items:[{url:"http://fairfield.ebayclassifieds.com/",name:"Fairfield"},{url:"http://newyork.ebayclassifieds.com/",name:"New York City"}],error:null}

不幸的是,JSON字符串无效。密钥(itemsurl,...)必须用引号"括起来。您可以轻松检查json_last_error()是否出现语法错误(错误代码4JSON_ERROR_SYNTAX)。

<强>更新

根据这个问题:Invalid JSON parsing using PHP,您可以使用以下内容使JSON字符串有效:

$json = preg_replace('/(\w+):/i', '"\1":', $json);

这将键括在引号中。


如果字符串 有效,那么您可以通过以下方式生成数组:

$a = json_decode($json, true);

会给你:

Array
(
    [items] => Array
        (
            [0] => Array
                (
                    [url] => http://fairfield.ebayclassifieds.com/
                    [name] => Fairfield
                )
            [1] => Array
                (
                    [url] => http://newyork.ebayclassifieds.com/
                    [name] => New York City
                )
        )
    [error] => 
)

因此,您可以通过$a['items'][0]['url']$a['items'][0]['name']获取第一个网址和名称。


但我再说一遍,您收到的JSON是无效而您无法使用原始格式的json_decode()解析它。

答案 1 :(得分:0)

它无效的JSON。密钥应该包含在引号内。

您可以使用优秀的JSON Lint网站验证您的json。

这是返回数据的有效版本:

 {
"items": [
    {
        "url": "http://fairfield.ebayclassifieds.com/",
        "name": "Fairfield"
    },
    {
        "url": "http://newyork.ebayclassifieds.com/",
        "name": "New York City"
    }
],
 "error": "null"
}