私は Shopware プロジェクトに取り組んでおり、処理されたすべての注文を含む JSON を設定する必要があります。
この JSON は、私が見つけたディレクトリに保存され、変数$filに渡されます。
リーリー取得した JSON は変数$filに格納され、変数$jsonDataに渡されます。
リーリーJSON を連想配列にデコードして、以下のキーの値を置き換えようとしています。
リーリー置き換えるキーは以下の通り(IDを置き換えてみてください)
リーリー次に、それを変数modifiedJsonDataに保存し、ディレクトリに置き換えて戻してみました。
リーリー(ID) を置き換えるだけではなく、部分的には機能するようですが、完全には機能しないようです。
以下に示すように:$data['entity']['payments'][0]['state']['id']
上記のコンテンツだけでなく、JSON コンテンツ全体を置き換えます。JSON コンテンツは次のコンテンツ以上である必要があります:
リーリー助けてください、私が何か間違ったことをしたかもしれません
次の方法でも回避できます:
リーリーjson_decode() を使用して JSON をデコードする場合は、$jsonData に正しい JSON テキストがあることを確認し、現在のシナリオでは 2 つのフラグを使用します。最初のフラグは常に使用され、2 番目のフラグはより具体的です。
JSON_THROW_ON_ERROR
JSON_BIGINT_AS_STRING
(PHP 8.0以降)
リーリー(PHP 7.3以降)
JSON_THROW_ON_ERROR
$data['entity']['payments'][0]['state']['id']の JSON のみが表示される理由は、
JSON_BIGINT_AS_STRING$data であるためです。 = 解析が失敗したため、json_decode(...)
オペレーションはnull
を返しました。JSON_THROW_ON_ERROR
を使用すると、エラーが例外に変換され、エラーが発生したときにスクリプトの実行が停止されるため、発見が容易になります。これにより、後続の出力でエラーを探す必要がなくなります。
BigIntBIGINT は、
(ECMA 262) を指します。これは、処理時に json_decode() が精度を失う可能性がある非常に大きな (負および正の) 整数を表す JavaScript の数値型です (3v4l. orgDemo):リーリー リーリー
参照
Q&A「PHP に BigInteger クラスはありますか?」 https://www.php.net/manual/en/function.json-decode.php
https://www.php.net/manual/en/class.jsonException.php