Concaténer 2 listes JSON

Résolu

Bonjour, 

J'essaye de concaténer deux variables contenant du JSON. Je voudrais ajouter une nouvelle ligne à une liste JSON déjà présente dans un fichier sans écraser celui-ci.

Voici le code :

def json_block_name(blockName):
    blockId = "block.extratexturesblocks." + blockName
    JsonData = {blockId : blockName.replace("_", " ").title()}
    print("JsonData:", JsonData)
    with open("../src/main/resources/assets/extratexturesblocks/lang/en_us.json") as fyl4:
        ctc = fyl4.read()
        print("ctc:", ctc)
        JsonDataOpen = json.loads("".join(ctc))
        print("JsonDataOpen:", JsonDataOpen)

1 réponse

  1. Modérateur

    Bonjour,

    De manière générale, du moment que tu arrives à charger les deux fichiers json et à réunir les deux structures pythons engendrée dans la structure qui te convient, il te suffit alors de dumper cette structure pour obtenir le résultat souhaité. Bref, sans voir les deux fichiers json en question et le résultat attendu, difficile de donner une réponse très précise.

    • S'ils contiennent tous les deux une liste, tu peux les charger dans une liste dédiée puis dumper la liste concaténée :
    import json
    
    with open("fichier1.json", "r") as f1:
        l1 = json.load(f)
    with open("fichier2.json", "r") as f2:
        l2 = json.load(f)
    with open("results.json", "w") as f:
        json.dump(l1 + l2, fp=f, indent=4)
    • Si au moins l'un des deux fichiers contient un objet JSON qui n'est pas une liste, tu ne pourras pas les concaténer. Tu peux donc les insérer dans une liste qui sera alors dumpée. Le programme reste identique, excepté la dernière ligne qui devient :
        json.dump([l1 + l2], indent=4, fp=f)

    Bonne chance

    1. Je voudrais ouvrir mon fichier nommée fyl4, qui contient une liste:

      {
        "block.extratexturesblock.ancient_stone_array": "Ancient Stone Array",
        "itemGroup.extratexturesblocks": "Extra Textures Blocks"
      }

      et ajouter la variable json JsonData

      JsonDta= {"block.extratexturesblocks.blockname":"Block Name"}

      et que l'on concatène ces deux morceux de json pour devenir :

      {
        "block.extratexturesblock.ancient_stone_array": "Ancient Stone Array",
        "itemGroup.extratexturesblocks": "Extra Textures Blocks",
        "block.extratexturesblocks.blockname":"Block Name"
      }
    2. Modérateur
      @firpic

      Merci c'est plus clair. Dans ce cas ce ne sont pas des listes que tu manipules mais des dictionnaires.

      Si je devais reformuler correctement ton problème je dirais donc plutôt :

      J'ai deux fichiers JSON contenant chacun un dictionnaire. L'ensemble des clés du premier et du second dictionnaires sont disjoints. Je veux fusionner ces deux dictionnaires et écrire le dictionnaire qui en résulte dans un autre fichier.

      import json
      
      with open("fichier1.json", "r") as f1:
          d1 = json.load(f)
      with open("fichier2.json", "r") as f2:
          d2 = json.load(f)
      
      for (k2, v2) in d2.items():
          d1[k2] = v2
      
      with open("results.json", "w") as f:
          json.dump(d1, fp=f, indent=4)

      Quelques remarques par rapport à ton message #1

      • En tant que variable, JsonData et JsonDataOpen devraient avoir un nom qui commence par une minuscule.
      • Généralement, en python, on nomme une variable plutôt avec des minuscules et des underscore (ma_variable), le style camel case s'utilise plutôt en Java.
      • Pense à mettre des espaces derrières les virgules et autour des opérateurs pour te conformer aux normes PEP8 (j'ai corrigé ton message par rapport à ça).

      Bonne chance

    3. @mamiemando

      Merci,

      La question est bien lieux pose que la mienne.

      Pour les variables, j'ai l'habitude de les nomme en majuscule avec Java. Je n'ai pas l'habitude de python.

    4. @mamiemando

      Merci, le script fonctionne parfaite sans probleme 

    5. Modérateur
      @firpic

      Merci pour ton retour bonne continuation !