Ich arbeite an einem Shopware-Projekt und muss ein JSON einrichten, das alle verarbeiteten Bestellungen enthält.
Dieser JSON wird in einem Verzeichnis gespeichert, das ich gefunden und an eine Variable $fil übergeben habe.
$filer = $order1->getOrderNumber() . '_' . $country2->getIso() . '.json'; $fil = __DIR__ . '/' . $filer; $file_contents = file_get_contents($fil);
Der erhaltene JSON wird in der Variablen $fil gespeichert und dann an die Variable $jsonData übergeben.
$jsonData = $fil;
Ich versuche, den Wert des Schlüssels unten zu ersetzen, indem ich den JSON in ein assoziatives Array dekodiere.
$data = json_decode($jsonData, true);
Die zu ersetzenden Schlüssel sind wie folgt (versuchen Sie, die ID zu ersetzen)
$data['entity']['payments'][0]['state']['id'] = $logMessageId;
Dann habe ich versucht, es wieder in einer Variablen modifiedJsonData zu speichern und es wieder im Verzeichnis zu ersetzen.
$modifiedJsonData = json_encode($data, JSON_PRETTY_PRINT); file_put_contents($fil, $modifiedJsonData);
Es scheint teilweise, aber nicht vollständig zu funktionieren und nicht nur (ID) zu ersetzen.
Wie unten gezeigt:$data['entity']['payments'][0]['state']['id']
Es ersetzt den gesamten JSON-Inhalt, nicht nur den oben genannten Inhalt. Der JSON-Inhalt sollte mehr als der folgende Inhalt sein:
{ "entity": { "payments": [ { "state": { "id": ##### } } ] } }
Bitte helfen Sie, ich habe möglicherweise etwas falsch gemacht
我还能通过以下方式绕过它:
在使用json_decode()解码JSON时,确保$jsonData中有正确的JSON文本,并且在当前场景下使用两个标志,第一个标志始终使用,第二个标志更具体:
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,是因为$data = json_decode(...)
操作返回了null
,因为解析失败。使用JSON_THROW_ON_ERROR
会将任何错误转换为异常,这样更容易发现,因为它会在错误时停止脚本的执行。这样可以避免在后续输出中查找错误。
JSON_BIGINT_AS_STRING
BIGINT是指BigInt(ECMA 262),它是JavaScript中用于非常大的(负数和正数)整数的数字值类型,json_decode()在处理时可能会丢失精度(3v4l.org演示):