Concaténer 2 listes JSON

Résolu
firpic Messages postés 90 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -

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)
A voir également:

1 réponse

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 

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

0
firpic Messages postés 90 Date d'inscription   Statut Membre Dernière intervention   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"
}
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884 > firpic Messages postés 90 Date d'inscription   Statut Membre Dernière intervention  
 

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

1
firpic Messages postés 90 Date d'inscription   Statut Membre Dernière intervention   1 > mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention  
 

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.

0
firpic Messages postés 90 Date d'inscription   Statut Membre Dernière intervention   1 > mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention  
 

Merci, le script fonctionne parfaite sans probleme 

0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884 > firpic Messages postés 90 Date d'inscription   Statut Membre Dernière intervention  
 

Merci pour ton retour bonne continuation !

0