Chaînes multilignes dans JSON

J’écris des fichiers de données au format JSON et je voudrais avoir des chaînes de caractères très longues réparties sur plusieurs lignes. En utilisant le module JSON de python, je reçois beaucoup d’erreurs, que j’utilise \ ou \n en tant qu’échappement.

Est-il possible d’avoir des chaînes multi-lignes en JSON? C’est surtout pour le confort visuel que je suppose que je peux simplement mettre un mot sur mon éditeur, mais je suis juste un peu curieux …

JSON n’autorise pas les sauts de ligne réels. Vous devez remplacer tous les sauts de ligne par \n .

J’ai dû faire cela pour un petit projet Node.js et j’ai trouvé cette solution :

 { "modify_head": [ "" ], "modify_body": [ "", "" ], } 

Cela me semble bien, à part ça, je dois utiliser des guillemets doubles partout. Bien que sinon, je pourrais peut-être utiliser YAML, mais cela présente d’autres pièges et n’est pas pris en charge en mode natif. Une fois analysé, j’utilise simplement myData.modify_head.join('\n') ou myData.modify_head.join() , selon que je veux ou non un saut de ligne après chaque chaîne.

Découvrez les spécifications ! La production de caractères de la grammaire JSON peut prendre les valeurs suivantes:

  • any-Unicode-character-except- " -ou–
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u quatre chiffres hexadécimaux

Les nouvelles lignes sont des “caractères de contrôle”, donc non, vous ne pouvez pas avoir de ligne nouvelle dans votre chaîne. Cependant, vous pouvez l’encoder en utilisant n’importe quelle combinaison de \n et \r requirejse.

C’est une question vraiment ancienne, mais je suis tombé sur cela lors d’une recherche et je pense connaître la source de votre problème.

JSON n’autorise pas les “nouvelles” lignes dans ses données; il ne peut avoir échappé à de nouvelles lignes. Voir la réponse de @YOU, ci-dessus. Selon la question, il semble que vous ayez tenté d’échapper les sauts de ligne dans Python de deux manières: en utilisant le caractère de continuation de ligne (“\”) ou en utilisant “\ n” comme échappement.

Mais gardez à l’esprit que si vous utilisez une chaîne en python, les caractères d’échappement spéciaux (“\ t”, “\ n”) sont traduits en caractères de contrôle REAL! Le “\ n” sera remplacé par le caractère de contrôle ASCII représentant un caractère de nouvelle ligne, qui est précisément le caractère illégal dans JSON. (Quant au caractère de continuation de ligne, il ne fait que sortir la nouvelle ligne.)

Donc, ce que vous devez faire est d’empêcher Python d’échapper des caractères. Vous pouvez le faire en utilisant une chaîne brute (mettez r devant la chaîne, comme dans r"abc\ndef" , ou en incluant une barre oblique supplémentaire devant la nouvelle ligne ( "abc\\ndef" ).

Les deux éléments ci-dessus, au lieu de remplacer “\ n” par le caractère de contrôle ASCII de la nouvelle ligne, laisseront “\ n” deux caractères littéraux, que JSON pourra interpréter comme une nouvelle ligne d’échappement.

JSON ne permet pas les lignes de rupture pour la lisibilité.

Votre meilleur pari est d’utiliser un IDE qui vous convienne.

Écrivez la valeur de propriété sous la forme d’un tableau de chaînes. Comme exemple donné ici https://gun.io/blog/multi-line-ssortingngs-in-json/ . CA aidera.

Nous pouvons toujours utiliser un tableau de chaînes pour les chaînes multilignes comme suit.

 { "singleLine": "Some singleline Ssortingng", "multiline": ["Line one", "line Two", "Line Three"] } 

Et nous pouvons facilement parcourir le tableau pour afficher le contenu en mode multi-lignes.

Utilisez regex pour remplacer toutes les occurrences de \r\n par \\n .

Cela a fonctionné pour moi en scala.

 val newstr = str.replace("\r\n", "\\n") 

Est-il possible d’avoir des chaînes multi-lignes en JSON?

Oui. Je viens de tester ceci avec mon navigateur Web Firefox en appuyant sur F12, en cliquant sur console et en tapant au bas de l’écran.

 x={text:"hello\nworld"} 

L’object x vient d’être créé à partir d’une chaîne au format JSON contenant une chaîne multi-lignes.

 console.log(x.text) hello world 

x.text s’affiche pour indiquer qu’il s’agit d’une chaîne multi-lignes.

Ces deux tests montrent que l’interpréteur Javascript de Firefox est heureux de créer et d’utiliser JSON avec des chaînes multilignes.

D’autres tests avec JSON.ssortingngify et JSON.parse ont montré que l’interpréteur Javascript pouvait convertir un object contenant des chaînes multilignes en JSON et le réparsingr sans aucun problème.

Dans le passé, j’ai stocké l’intégralité des œuvres de Shakespeare en tant que propriété dans un object JSON, puis je les ai envoyées sur Internet sans les endommager.

Exemple

Voici une chaîne de deux lignes entrée sur trois lignes

 x={text:"expert\ s\nex\ change"} 

Nous pouvons afficher l’object

 console.log(x) 

donnant

 Object { text: "experts\nexchange" } 

ou la chaîne

 console.log(x.text) 

donnant

 experts exchange 

La fin des lignes dans la chaîne résulte de l’utilisation de \ n et les multiples lignes d’entrée sont obtenues en utilisant \ à la fin de la ligne.

En pratique, vous voudrez peut-être synchroniser vos fins de ligne avec celles de la chaîne, par exemple

 x={text:"experts\n\ exchange"} 

Longueur de chaîne multi-lignes

 console.log("Hello\nWorld".length) 11 console.log("Hello World".length) 11 

Notez que la chaîne avec la nouvelle ligne n’est pas plus longue que la chaîne contenant l’espace. Même si deux caractères ont été tapés sur le clavier (‘\’ et ‘n’), un seul caractère est stocké dans la chaîne.

Enroulez chaque ligne entre guillemets et terminez-les par une virgule comme indiqué ci-dessous:

 "content": [ "This is the first line", "this is second", "and so on" ] 

Utilisez json5 (loader) voir https://json5.org/ – exemple (par json5)

{lineBreaks: “Regardez, maman! \ Non \ n!”,}

Essayez d’utiliser une valeur de chaîne codée en base64 . Travaillé pour moi la plupart du temps.

 { "singleLine": "Some singleline Ssortingng", "multiline": ["Line one", "line Two", "Line Three"] } 

après que la chaîne encodée en base64 ressemble

 { "singleLine": "Some singleline Ssortingng", "multiline": "TGluZSBvbmUKTGluZSBUd28KTGluZSBUaHJlZQ==" } 

L’encodage et le décodage en base64 sont disponibles dans toutes les langues.

{{prénom}}
{{name1}}

my.opt.push ({‘name’: ‘line1’, ‘name1’: ‘line2’)

vous pouvez simplement exécuter le code ci-dessous avec votre chaîne de multiligne désirée entre le caractère tilde ~ :

 var multiLineSsortingng = ` this is the multiline Ssortingng `; JSON.ssortingngify(multiLineSsortingng); 

Il suffit d’inclure des balises de paragraphe pour le rendre plus net et plus efficace.

Exemple: “body”: ”

Paragraphe 1 ici.

Paragraphe 2 ici.

“,

 fieldval = rs.getSsortingng(rs.getMetaData().getColumnName(i)) .sortingm() .replace("\\", "/") .replace("\r\n", "\\n") .replace("''", "\\n") .replace("\"", "\\n"); 

écrire n’importe quel texte dans notepad ++ avec multi multi line puis appuyer sur ctl + a et ctl + j pour les ranger dans une ligne

Dans le fichier json, écrivez:

 { "key":"multi line copied from notepad++" } 

mettre le texte multiligne sur le fichier txt, puis

 var str = { text: cat('path_to_file/text.txt') } 

(ça marche sur mongoDB)

Vous pouvez essayer de placer

entre les phrases.