这是我试图用PHP解码的JSON,但是遇到了问题。请检查下面的代码。
{ "146505212039213_2962095710480135": {
"reactions_like": {
"data": [
],
"summary": {
"total_count": 172595
}
},
"reactions_love": {
"data": [
],
"summary": {
"total_count": 75252
}
},
"reactions_haha": {
"data": [
],
"summary": {
"total_count": 132
}
},
"id": "146505212039213_2962095710480135"
}}
我正在使用的代码:
function curl_get_contents($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$json = curl_get_contents('URL HERE');
$data = json_decode($json);
echo $data->146505212039213_2962095710480135->reactions_like->summary->total_count;
这是我得到的错误:
解析错误:语法错误,意外'146505212039213'(T_DNUMBER), 期待标识符(T_STRING)或变量(T_VARIABLE)或'{'或'$' 在第13行的C:\ xampp \ htdocs \ test.php
我在这里做错了什么?
答案 0 :(得分:1)
嗯,这个错误信息在这里真的很有帮助。解析器等待属性名称(应该是有效的标识符 - 这将数字作为第一个符号删除),或$
字符(后跟标识符表达式)或{
。然而它收到一个数字 - 并停止,茫然和困惑。
要将密钥用作属性名称,应将其转换为字符串。一种可能的方法是使用{' ... '}
包装器:
echo $data->{'146505212039213_2962095710480135'}->...
Demo。或者,您可以将此字符串存储在变量中,并使用该变量:
$index = '146505212039213_2962095710480135';
echo $data->$index->...
我仍然强烈建议您考虑另一种方法:使用关联数组而不是对象。造成这种情况的一个特殊原因是众所周知的accessing numeric properties in objects问题。
$json = '{"146505212039213_2962095710480135":"test"}';
$data = json_decode($json, true); // use array, not object
echo $data['146505212039213_2962095710480135']; // test
答案 1 :(得分:0)
Identifiers/variable names can't begin with a number,因此$data->146505212039213_2962095710480135
无效。
您需要做以下事情:
$index = '146505212039213_2962095710480135';
echo $data->$index->reactions_like->summary->total_count;
或
echo $data->{'146505212039213_2962095710480135'}->reactions_like->summary->total_count;