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
638

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 variable modifiedJsonData et 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é null car l'analyse a échoué. L'utilisation de $data['entity']['payments'][0]['state']['id']的JSON,是因为$data = json_decode(...)操作返回了null,因为解析失败。使用JSON_THROW_ON_ERROR convertira 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!