我正在尝试从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);
答案 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字符串无效。密钥(items
,url
,...)必须用引号"
括起来。您可以轻松检查json_last_error()
是否出现语法错误(错误代码4
,JSON_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"
}