Comment remplacer et enregistrer le contenu de la clé JSON dans Shopware 6.5 à l'aide de PHP
P粉306523969
P粉306523969 2023-09-09 23:36:03
0
2
571

Je travaille sur un projet Shopware et j'ai besoin de mettre en place un JSON contenant toutes les commandes traitées.

Ce JSON est stocké dans un répertoire que j'ai trouvé et passé à une variable$fil.

$filer = $order1->getOrderNumber() . '_' . $country2->getIso() . '.json'; $fil = __DIR__ . '/' . $filer; $file_contents = file_get_contents($fil);

Le JSON obtenu est stocké dans la variable$fil, puis transmis à la variable$jsonData.

$jsonData = $fil;

J'essaie de remplacer la valeur de la clé ci-dessous en décodant le JSON dans un tableau associatif.

$data = json_decode($jsonData, true);

Les clés à remplacer sont les suivantes (essayez de remplacer l'ID)

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

Ensuite, j'ai essayé de le sauvegarder dans une variablemodifiedJsonDataet de le remplacer dans le répertoire.

$modifiedJsonData = json_encode($data, JSON_PRETTY_PRINT); file_put_contents($fil, $modifiedJsonData);

Il semble fonctionner partiellement, mais pas complètement, et ne se contente pas de remplacer (ID).

Comme indiqué ci-dessous :$data['entity']['payments'][0]['state']['id']

Il remplace l'intégralité du contenu JSON, pas seulement le contenu ci-dessus, le contenu JSON doit être plus que le contenu suivant :

{ "entity": { "payments": [ { "state": { "id": ##### } } ] } }

S'il vous plaît, aidez-moi, j'ai peut-être fait quelque chose de mal

P粉306523969
P粉306523969

répondre à tous (2)
P粉762730205

Je peux aussi le contourner par :

$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

    Lors du décodage du JSON à l'aide de json_decode(), assurez-vous d'avoir le texte JSON correct dans $jsonData et utilisez deux indicateurs dans le scénario actuel, le premier indicateur est toujours utilisé et le deuxième indicateur est plus spécifique :

    1. JSON_THROW_ON_ERROR
    2. JSON_BIGINT_AS_STRING

    Exemple :

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

    (Depuis PHP 8.0)

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

    (Depuis PHP 7.3)

    JSON_THROW_ON_ERROR

    La raison pour laquelle je ne vois que le JSON de$data['entity']['payments'][0]['state']['id']est parce que$data = json_decode L'opération (...)a renvoyénullcar l'analyse a échoué. L'utilisation de$data['entity']['payments'][0]['state']['id']的JSON,是因为$data = json_decode(...)操作返回了null,因为解析失败。使用JSON_THROW_ON_ERRORconvertira toutes les erreurs en exceptions, qui sont plus faciles à repérer car cela arrêtera l'exécution du script en cas d'erreur.

    Cela évite de rechercher des erreurs dans les sorties ultérieures.

    JSON_BIGINT_AS_STRING

    BIGINT fait référence àBigInt(ECMA 262), qui est un type de valeur numérique en JavaScript pour les très grands entiers (négatifs et positifs), dont json_decode() peut perdre en précision lors du traitement (Démo 3v4l.org) :

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

      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!