2017-09-01 58 views
0

這是我嘗試使用PHP解碼的JSON,但出現問題。請檢查我的代碼如下。T_DNUMBER解碼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; 

這是我收到的錯誤:

Parse error: syntax error, unexpected '146505212039213' (T_DNUMBER), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in C:\xampp\htdocs\test.php on line 13

什麼,我做錯了什麼?

+0

錯誤之類的了答案: 「預期標識符(T_STRING)」。像'12_34'這樣的東西不是數字。看看如何[使用特殊字符訪問屬性](https://duckduckgo.com/?q=php+access+property+with+special+characters) – mario

+0

重新打開,因爲對於wiki帖子中的T_DNUMBER沒有好的答案。 – Sammitch

回答

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 
+0

感謝它的工作! –

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;