web-dev-qa-db-fra.com

Erreur de formatage JSON lors du chargement dans Google Big Query

J'essaie de charger les données suivantes dans Big Query à partir de PUBSUB en utilisant le modèle de flux de données intégré:

{
    "current_speed": "19.09",
    "_east": "-87.654561",
    "_last_updt": "2018-07-17 15:50:54.0",
    "_region_id": "1",
    "_north": "42.026444",
    "_south": "41.997946",
    "region": "Rogers Park - West Ridge",
    "_west": "-87.709645",
    "_description": "North of Devon. Kedzie to Lake Shore"
}

Mais je continue à recevoir cette erreur:

"Erreur lors de la lecture des données, message d'erreur: échec de l'analyse JSON: fin de chaîne inattendue; fin de chaîne inattendue; clé attendue"

J'ai en fait besoin de charger le plus grand ensemble de données qui ressemble à ceci:

 [{
    "current_speed": "19.09",
    "_east": "-87.654561",
    "_last_updt": "2018-07-17 15:50:54.0",
    "_region_id": "1",
    "_north": "42.026444",
    "_south": "41.997946",
    "region": "Rogers Park - West Ridge",
    "_west": "-87.709645",
    "_description": "North of Devon. Kedzie to Lake Shore"
}, {
    "current_speed": "25.23",
    "_east": "-87.747456",
    "_last_updt": "2018-07-17 15:50:54.0",
    "_region_id": "2",
    "_north": "42.0190998",
    "_south": "41.960669",
    "region": "Far North West",
    "_west": "-87.84621",
    "_description": "North of Montrose. East River to Cicero"
}

]

Mais là, je reçois cette erreur:

Erreur lors de la lecture des données, message d'erreur: Échec de l'analyse JSON: aucun objet n'a été trouvé au démarrage d'un nouveau tableau. BeginArray a renvoyé false; Analyseur terminé avant la fin de la chaîne

Qu'est-ce que je fais mal ici?

6
Anubis05

Oui, BigQuery accepte uniquement le JSON délimité par des nouvelles lignes, ce qui signifie un objet JSON complet par ligne. Avant de fusionner l'objet en une seule ligne, BigQuery lit "{", qui est le début d'un objet, et s'attend à lire une clé, mais la ligne s'est terminée, vous voyez donc le message d'erreur "clé attendue".

Pour plusieurs objets JSON, placez-les simplement un dans chaque ligne. Ne les enfermez pas dans un tableau. BigQuery attend que chaque ligne commence par un objet, "{". Si vous mettez "[" comme premier caractère, vous verrez le deuxième message d'erreur qui signifie que BigQuery lit un tableau mais pas à l'intérieur d'un objet.

10
Hua Zhang

Pour convertir JSON en nouveau JSON délimité par des lignes (qui est le format que BigQuery ingère), vous pouvez utiliser 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"}

(voir https://stackoverflow.com/a/51301075/132438 )

8
Felipe Hoffa