1

PHP では、{name-with-reserved-chars} 表記を使用して JSON デコード後にオブジェクト データにアクセスする方法を見つけましたが、パスにもインデックス値があります ([0] など)。パターンを変更しようとしても、インデックス値を追加しようとしても何も返されませんでした。大きな JSON オブジェクトに基づく例を次に示します。

["ops:world-patent-data"]["exchange-documents"]["exchange-document"]
[0]["bibliographic-data"]["publication-reference"]["document-id"][0].date.$

私の試みは何も得られません:

print $result->{'ops:world-patent-data'}->{'exchange-documents'}->{'exchange-document'}->
      {0}->{'bibliographic-data'}->{'publication-reference'}->{'document-id'}->{0}->date;

0 と 1 のインデックスをパスに配置する方法を知りたい...

4

1 に答える 1

3

実際のJSONリスト(つまり、オブジェクトではなく、数値インデックスを持つ実際の配列、[1,2,3,...]またはのようなもの[{...},{...},...])を逆シリアル化する場合、PHPのparse_json関数は、数値インデックスを持つ対応するPHP配列を構築します(一方、JSONオブジェクトstdClassクラス-関数の$assocパラメーターを使用しない限りparse_json)。

したがって、オブジェクトではなく配列にアクセスしているため、コードはおそらく次のようになります。

print $result->{'ops:world-patent-data'}->{'exchange-documents'}->
    {'exchange-document'}[0]->{'bibliographic-data'}->{'publication-reference'}->
    {'document-id'}[0]->date;

パラメータを使用する方がおそらく簡単で、JSONオブジェクト全体を連想配列にマップする$assocように強制json_decodeし、オブジェクトアクセスにも角括弧表記を使用できるようにします。

于 2013-02-03T22:31:15.407 に答える