2016-04-18 1 views
2

J'ai un exemple de fichier json et j'essaye de remplir une table MySQL avec. Puisque MySQL 5.7 supporte json comme un type de données natif, je pensais que cela ne devrait pas être un problème, mais le validateur json de MySQL semble avoir un problème avec les sauts de ligne dans le fichier. Dès que je me débarrasse de tous les sauts de ligne et que j'écris mon fichier d'exemple en une ligne, cela fonctionne parfaitement.Existe-t-il un moyen de remplir une table MySQL 5.7 avec des données d'un fichier json avec des sauts de ligne sur Win7?

[ 
{ 
    "somestuff": [ 
     { 
      "field1": "val1", 
      "field2": 17, 
      "field3": 27, 
      "field4": 42, 
      "field5": 73 
     }, 
     { 
      "field1": "val2", 
      "field2": 3, 
      "field3": 12, 
      "field4": 13, 
      "field5": 100 
     } 
    ], 
    "field0": "image", 
    "path": "some path" 
} 
] 

Je sais que JSON a nativement des problèmes avec des chaînes contenant des barres obliques inverses, mais même en écrivant une sorte de mot au lieu du chemin, le validateur JSON MySQL lire ne peux toujours pas complètement le fichier JSON et arrête juste avant la première saut de ligne. Je reçois encore erreur suivant:

Error Code: 3140. Invalid JSON text: "Invalid value." at position 1 in value (or column) '['. 

lorsque vous utilisez la requête suivante:

-- create test table for json data 
CREATE TABLE IF NOT EXISTS jsons_test(
     annotation_id INT AUTO_INCREMENT NOT NULL UNIQUE, 
     json_data json); 
LOAD DATA LOCAL INFILE 'C:\\some\\path\\test.json' 
INTO table json_test(json_data); 

Je suppose que cela arrive le plus probablement à cause du codage de saut de ligne, mais je ne sais toujours pas s'il y a une solution de contournement à résoudre.

MISE À JOUR: J'ai trouvé une solution sur mon propre ... En ajoutant LINES TERMINATED BY '\\n' je pouvais remplir avec succès la table avec les données JSON et utiliser les avantages du nouveau support JSON de MySQL.

+0

À moins que je me manque quelque chose, 'données de charge infile' attend CSV. J'ai l'impression que vous avez seulement le JSON brut: -? –

+0

Selon certains sites que j'ai trouvés, cela semble fonctionner. (http://www.databasejournal.com/features/mysql/working-with-json-data-in-mysql-7.html ou http://dasini.net/blog/2015/11/17/30-mins -with-json-en-mysql /). Il fonctionne également parfaitement lors de la suppression de tous les sauts de ligne, laissant un fichier json d'une ligne. Donc, la commande ne semble pas être le problème:/ – user3168930

+0

En outre, le fait que j'obtienne même un message d'erreur lié à la syntaxe json prouve que la commande sql est réellement capable de le lire comme un fichier json et même essayer de validez le .. – user3168930

Répondre

2

J'ai trouvé une solution pour mon problème: voir MISE À JOUR