2

私はかなり単純な構造で JSON でデータを返す API からの応答を処理しています。疑似構造は、次のように表すのが最適です。

services -> service -> options -> option -> suboptions -> option

これはデコードされた JSON であるため、これらはすべて stdClass オブジェクトです。さまざまなサービスとオプションを反復処理する foreach ステートメントが多数ありますが、これらはすべて問題なく機能します。ただし、サブオプション レベルで foreach ステートメントを使用すると、オブジェクトは文字列にシリアル化されます。参考までに、サブオプションはこのような構造になっています。

[suboptions] => stdClass Object
 (
    [option] => stdClass Object
        (
            [code] => SOME_CODE
            [name] => Some Name
        )

 )

このような foreach を使用する場合 ( $option はservices -> service -> options -> optionのオプションです):

foreach($option->suboptions->option as $suboption) {
  print_r($suboption);
}

出力します

SOME_CODESome Name

期待通りではない

stdClass Object
  (
     [code] => SOME_CODE
     [name] => Some Name
  )

foreach が深度やその他の条件に関してこれを行う理由はわかりません。私は考えられるすべてのことを試し、SO を検索しましたが、このようなケースは見つかりませんでした。誰かが何かアイデアを持っているなら、私はそれらを聞きたいです! 乾杯。

他の場所で回答されているか、明らかな何かが欠けている場合はお詫び申し上げます。私が持っている場合、それはこれまで私を逃れてきました。

編集:それを尋ねる人にとっては、確かにAusPost PAC APIです。2014年まで削除されているため、DRCからの切り替え。

4

3 に答える 3

1

評判があまりよくないのでコメントできませんが、答えてみます...

PHP配列からstdClassを削除したいと思いますか?

trueその場合は、JSON をデコードするときに使用していることを確認してください。

例:$array = json_decode($json, true);

stdClass の詳細については、SO の投稿: What is stdClass in PHP?を参照してください。

繰り返しますが、質問を誤解している場合はご容赦ください。コメントできればと思います...

于 2013-10-07T02:27:57.733 に答える