2017-09-01 25 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)のwikiの記事でT_DNUMBERには良い答えがありませんので、 – mario

+0

が再オープンに見えます。 – Sammitch

答えて

1

さて、このエラーメッセージは本当に役に立ちます。パーサーは、プロパティ名(有効な識別子である必要があります。これにより最初の記号として数字が削除されます)または$文字(その後に識別子式が続きます)または{のいずれかが待機します。それでも、それは数字を受け取って停止し、呆然として混乱します。

キーをプロパティ名として使用するには、文字列に変換する必要があります。

echo $data->{'146505212039213_2962095710480135'}->... 

Demo:1つの可能な方法は、{' ... '}ラッパーを使用しています。代替は、あなたが変数にこの文字列を格納することができますし、代わりにその変数を使用します。

$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; 
関連する問題