Saya sedang mengusahakan projek Shopware dan perlu menyediakan JSON yang mengandungi semua pesanan yang diproses.
JSON ini disimpan dalam direktori yang saya temui dan hantar kepada pembolehubah $fil.
$filer = $order1->getOrderNumber() . '_' . $country2->getIso() . '.json'; $fil = __DIR__ . '/' . $filer; $file_contents = file_get_contents($fil);
JSON yang diperolehi disimpan dalam pembolehubah $fil, dan kemudian dihantar ke pembolehubah $jsonData.
$jsonData = $fil;
Saya cuba menggantikan nilai kunci di bawah dengan menyahkod JSON ke dalam tatasusunan bersekutu.
$data = json_decode($jsonData, true);
Kunci yang perlu diganti adalah seperti berikut (cuba ganti ID)
$data['entity']['payments'][0]['state']['id'] = $logMessageId;
Kemudian saya cuba menyimpannya semula ke dalam pembolehubah modifiedJsonData dan menggantikannya semula ke dalam direktori.
$modifiedJsonData = json_encode($data, JSON_PRETTY_PRINT); file_put_contents($fil, $modifiedJsonData);
Nampaknya berfungsi sebahagian, tetapi tidak sepenuhnya, dan bukan hanya menggantikan (ID).
Seperti yang ditunjukkan di bawah:$data['entity']['payments'][0]['state']['id']
Ia menggantikan keseluruhan kandungan JSON, bukan hanya kandungan di atas, kandungan JSON hendaklah lebih daripada kandungan berikut:
{ "entity": { "payments": [ { "state": { "id": ##### } } ] } }
Tolong bantu, saya mungkin melakukan sesuatu yang salah
Saya juga boleh memintasnya dengan:
Apabila menyahkod JSON menggunakan json_decode(), pastikan anda mempunyai teks JSON yang betul dalam $jsonData dan gunakan dua bendera dalam senario semasa, bendera pertama sentiasa digunakan dan bendera kedua lebih spesifik:
JSON_THROW_ON_ERROR
JSON_BIGINT_AS_STRING
Contoh:
(Sejak PHP 8.0)
(Sejak PHP 7.3)
JSON_THROW_ON_ERROR
Sebab mengapa saya hanya melihat JSON
$data['entity']['payments'][0]['state']['id']
adalah kerana$data = json_decode Operasi (...)
mengembalikannull
kerana penghuraian gagal. Menggunakan$data['entity']['payments'][0]['state']['id']
的JSON,是因为$data = json_decode(...)
操作返回了null
,因为解析失败。使用JSON_THROW_ON_ERROR
akan menukar sebarang ralat kepada pengecualian, yang lebih mudah dikesan kerana ia akan menghentikan pelaksanaan skrip apabila ralat.Ini mengelakkan daripada mencari ralat dalam output seterusnya.
JSON_BIGINT_AS_STRING
BIGINT merujuk kepada BigInt (ECMA 262), iaitu jenis nilai berangka dalam JavaScript untuk integer yang sangat besar (negatif dan positif), yang json_decode() mungkin kehilangan ketepatan semasa memproses (3v4l.org demo ) :