Concaténer 2 listes JSON

Résolu/Fermé
firpic Messages postés 90 Date d'inscription jeudi 3 juin 2021 Statut Membre Dernière intervention 20 décembre 2022 - Modifié le 13 sept. 2022 à 10:40
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 13 sept. 2022 à 19:14

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 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
12 sept. 2022 à 18:48

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 jeudi 3 juin 2021 Statut Membre Dernière intervention 20 décembre 2022 1
13 sept. 2022 à 10:20

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 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751 > firpic Messages postés 90 Date d'inscription jeudi 3 juin 2021 Statut Membre Dernière intervention 20 décembre 2022
13 sept. 2022 à 10:40

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 jeudi 3 juin 2021 Statut Membre Dernière intervention 20 décembre 2022 1 > mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024
13 sept. 2022 à 15:19

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 jeudi 3 juin 2021 Statut Membre Dernière intervention 20 décembre 2022 1 > mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024
13 sept. 2022 à 15:23

Merci, le script fonctionne parfaite sans probleme 

0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751 > firpic Messages postés 90 Date d'inscription jeudi 3 juin 2021 Statut Membre Dernière intervention 20 décembre 2022
13 sept. 2022 à 19:14

Merci pour ton retour bonne continuation !

0