J'ai une ligne dans mon fichier json qui manque un crochet fermant ('}') à la fin d'une ligne.

Exemple d'entrée:

{"title_text": "Malformed JSON", "createdAt": "2020-10-17T02:56:51+0700", "text": "Some post content", "author": "ninja"
{"title_text": "Fourth title", "createdAt": "2020-10-17T02:56:51+0700", "text": "Some post content", "author": "star"}

L'objet json "Quatrième titre" ajoute aux données, mais je veux ajouter un '}' à la fin de la ligne "JSON malformé" et ajouter l'objet json complet à mon tableau de données.

Cependant, j'ai essayé d'exécuter le code ci-dessous et il ajoute tout sauf le JSON malformé au tableau de données.

data = []
with open('../example.json') as f:
    for line in f:
        try:
            data.append(json.loads(line))
        except JSONDecodeError:
             if line and line.endswith(" "):
                data = data[len(line)-1].append("}")
                data.append(json.loads(line))
0
cookiestarninja 23 oct. 2020 à 08:13

3 réponses

Meilleure réponse

L'exemple que vous avez fourni ne se termine pas par un espace.

import json
from json.decoder import JSONDecodeError
data = []
with open('./example.json') as f:
    for line in f:
        try:
            data.append(json.loads(line))
        except JSONDecodeError:
             # Can add other failure conditions as well
             if line and not line.endswith("}"): 
                line = line + "}"
                data.append(json.loads(line))
0
Amith Lakkakula 23 oct. 2020 à 05:41

Changez simplement la boucle, cela devrait fonctionner:

for line in f:
    try:
        data.append(json.loads(line))
    except JSONDecodeError:
        if line:
            line.strip()
            if line[-1]!="}":
                line += "}"
            data.append(json.loads(line))
0
Abhinav Mathur 23 oct. 2020 à 05:26

Vous pouvez essayer comme ça.

import json

data = []
with open('../example.json', 'rt') as f:
    for line in f:
        try:
            data.append(json.loads(line))
        except json.JSONDecodeError:
            if line and not line.strip().endswith("}"):
                line = line.strip() + "}"
                data.append(line)

Votre ligne 1 se termine par «\ n», pas par «».

0
Venti Fang 23 oct. 2020 à 05:41