Mon objectif est de convertir le fichier JSON dans un format qui peut être téléchargé depuis Cloud Storage vers BigQuery ( comme décrit ici ) avec Python.
J'ai essayé d'utiliser newlineJSON package pour la conversion, mais je reçois l'erreur suivante.
JSONDecodeError: Expecting value or ']': line 2 column 1 (char 5)
Quelqu'un at-il la solution à cela?
Voici l'exemple de code JSON:
[{
"key01": "value01",
"key02": "value02",
...
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
...
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
...
"keyN": "valueN"
}
]
Et voici le script python existant:
with nlj.open(url_samplejson, json_lib = "simplejson") as src_:
with nlj.open(url_convertedjson, "w") as dst_:
for line_ in src_:
dst_.write(line_)
La réponse avec jq
est vraiment utile, mais si vous voulez toujours le faire avec Python (comme il semble d'après la question), vous pouvez le faire avec _ json
module.
import json
from io import StringIO
in_json = StringIO("""[{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
}
]""")
result = [json.dumps(record) for record in json.load(in_json)] # the only significant line to convert the JSON to the desired format
print('\n'.join(result))
{"key01": "value01", "key02": "value02", "keyN": "valueN"}
{"key01": "value01", "key02": "value02", "keyN": "valueN"}
{"key01": "value01", "key02": "value02", "keyN": "valueN"}
* J'utilise StringIO
et print
ici juste pour rendre un échantillon plus facile à tester localement.
Comme alternative, vous pouvez utiliser liaison Python jq pour le combiner avec l'autre réponse .
Si vous êtes prêt à sortir de Python, utilisez jq
:
$ cat a.json
[{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
},
{
"key01": "value01",
"key02": "value02",
"keyN": "valueN"
}
]
$ cat a.json | jq -c '.[]'
{"key01":"value01","key02":"value02","keyN":"valueN"}
{"key01":"value01","key02":"value02","keyN":"valueN"}
{"key01":"value01","key02":"value02","keyN":"valueN"}
L'itérateur que j'ai utilisé est '.[]'
pour parcourir le tableau et -c
place chaque objet JSON sur une seule ligne.
Ressources:
Cela prend un fichier JSON et convertit en fichier ND-JSON.
import json
with open("results-20190312-113458.json", "r") as read_file:
data = json.load(read_file)
result = [json.dumps(record) for record in data]
with open('nd-proceesed.json', 'w') as obj:
for i in result:
obj.write(i+'\n')
J'espère que cela aide quelqu'un.