Bagaimana untuk menggantikan dan menyimpan kandungan utama JSON dalam Shopware 6.5 menggunakan PHP
P粉306523969
P粉306523969 2023-09-09 23:36:03
0
2
694

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

P粉306523969
P粉306523969

membalas semua(2)
P粉762730205

Saya juga boleh memintasnya dengan:

$data = json_decode($jsonData, true, 512, JSON_BIGINT_AS_STRING);



    $data['entity']['payments'][0]['state']['id'] = $logMessageId;

        
        



$modifiedJsonData = json_encode($data, JSON_PRETTY_PRINT);
        
  
  

  $existingData = json_decode(file_get_contents($fil), true);
        
     
  

  $existingData['entity']['payments'][0]['state']['id'] = $data['entity']['payments'][0]['state']['id'];


 $updatedJsonData = json_encode($existingData, JSON_PRETTY_PRINT);
        
   
  

  file_put_contents($fil, $updatedJsonData);
P粉438918323

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:

  1. JSON_THROW_ON_ERROR
  2. JSON_BIGINT_AS_STRING

Contoh:

$data = json_decode($jsonData, true, flags: JSON_THROW_ON_ERROR | JSON_BIGINT_AS_STRING);

(Sejak PHP 8.0)

$data = json_decode($jsonData, true, 512, JSON_THROW_ON_ERROR | JSON_BIGINT_AS_STRING);

(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 (...) mengembalikan null 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 ) :

var_dump(json_decode('4599999999999999999999999999999999'));
var_dump(json_decode('4599999999999999999999999999999999', true, 512, JSON_BIGINT_AS_STRING));
float(4.6E+33)
string(34) "4599999999999999999999999999999999"

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan