J'écris des fichiers de données au format JSON et j'aimerais avoir de très longues valeurs de chaîne réparties sur plusieurs lignes. En utilisant le module JSON de python, j'obtiens beaucoup d'erreurs, que j'utilise \
ou \n
que j'échappe.
Est-il possible d'avoir des chaînes multi-lignes en JSON? C'est principalement pour le confort visuel, donc je suppose que je peux simplement activer le retour à la ligne dans mon éditeur, mais je suis juste un peu curieux ...
Réponses:
JSON n'autorise pas les sauts de ligne réels. Vous devez remplacer tous les sauts de ligne par
\n
.par exemple:
"first line second line"
peut enregistré avec:
"first line\nsecond line"
Remarque:
car
Python
, cela devrait être écrit comme suit:"first line\\nsecond line"
où
\\
est pour échapper la barre oblique inverse, sinon python traitera\n
comme le caractère de contrôle "nouvelle ligne"la source
\n
et les diffuser via Curses), cela\n
semble fonctionner correctement. Cela dépend du moteur de visualisation / rendu, semble-t-il.J'ai dû le faire pour un petit projet Node.js et j'ai trouvé cette solution :
Cela me semble assez soigné, à part que je dois utiliser des guillemets partout. Bien que sinon, je pourrais peut-être utiliser YAML, mais cela a d'autres pièges et n'est pas pris en charge nativement. Une fois analysé, j'utilise simplement
myData.modify_head.join('\n')
oumyData.modify_head.join()
, selon que je veux ou non un saut de ligne après chaque chaîne.la source
Malheureusement, la plupart des réponses ici abordent la question de savoir comment mettre un caractère de nouvelle ligne dans les données de chaîne. La question est de savoir comment rendre le code plus agréable en divisant la valeur de chaîne sur plusieurs lignes de code. (Et même les réponses qui reconnaissent cela fournissent des "solutions" qui supposent que l'on est libre de changer la représentation des données, ce qui dans de nombreux cas ne l'est pas.)
Et la pire nouvelle est qu'il n'y a pas de bonne réponse.
Dans de nombreux langages de programmation, même s'ils ne prennent pas explicitement en charge le fractionnement de chaînes sur plusieurs lignes, vous pouvez toujours utiliser la concaténation de chaînes pour obtenir l'effet souhaité; et tant que le compilateur n'est pas terrible, c'est bien.
Mais json n'est pas un langage de programmation; c'est juste une représentation des données. Vous ne pouvez pas lui dire de concaténer des chaînes. Sa grammaire (assez petite) n'inclut pas non plus la possibilité de représenter une chaîne sur plusieurs lignes.
À moins de concevoir un pré-processeur d'une sorte (et pour ma part, je n'ai pas envie de créer efficacement mon propre langage pour résoudre ce problème), il n'y a pas de solution générale à ce problème. SI vous pouvez changer le format des données, vous pouvez alors remplacer un tableau de chaînes. Sinon, c'est l'une des nombreuses façons dont json n'est pas conçu pour être lisible par l'homme.
la source
Consultez les spécifications ! La grammaire de JSON omble de production peut prendre les valeurs suivantes:
"
ou\
-ou-caractère-de-contrôle\"
\\
\/
\b
\f
\n
\r
\t
\u
quatre chiffres hexadécimauxLes sauts de ligne sont des "caractères de contrôle", donc, non, vous ne pouvez pas avoir de saut de ligne littéral dans votre chaîne. Cependant, vous pouvez l'encoder en utilisant n'importe quelle combinaison de
\n
et que\r
vous souhaitez.la source
JSON n'autorise pas les lignes de rupture pour plus de lisibilité.
Votre meilleur pari est d'utiliser un IDE qui fera un retour à la ligne pour vous.
la source
C'est une très vieille question, mais je suis tombé sur cette recherche et je pense que je connais la source de votre problème.
JSON n'autorise pas les "vraies" nouvelles lignes dans ses données; il ne peut avoir échappé qu'aux nouvelles lignes. Voir la réponse de @YOU . Selon la question, il semble que vous ayez tenté d'échapper aux sauts de ligne en Python de deux manières: en utilisant le caractère de continuation de ligne (
"\"
) ou en l'utilisant"\n"
comme d'échappement.Mais gardez à l'esprit: 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 réels! 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 non autorisé dans JSON. (Quant au caractère de continuation de ligne, il supprime simplement la nouvelle ligne.)Donc, ce que vous devez faire est d'empêcher Python d'échapper aux caractères. Vous pouvez le faire en utilisant une chaîne brute (placée
r
devant la chaîne, comme dansr"abc\ndef"
, ou en incluant une barre oblique supplémentaire devant la nouvelle ligne ("abc\\ndef"
).Au lieu de remplacer
"\n"
par le vrai caractère de contrôle ASCII de nouvelle ligne, les deux éléments ci-dessus resteront"\n"
sous la forme de deux caractères littéraux, que JSON pourra alors interpréter comme un échappement de nouvelle ligne.la source
Ecrivez la valeur de la propriété sous forme de tableau de chaînes. Comme exemple donné ici https://gun.io/blog/multi-line-strings-in-json/ . CA aidera.
Nous pouvons toujours utiliser un tableau de chaînes pour les chaînes multilignes comme suit.
Et nous pouvons facilement parcourir le tableau pour afficher le contenu sur plusieurs lignes.
la source
Utilisez json5 (chargeur) voir https://json5.org/ - exemple (par json5)
la source
Est-il possible d'avoir des chaînes multi-lignes en JSON?
Oui. Je viens de le tester maintenant avec mon navigateur Web Firefox en appuyant sur F12, en cliquant sur la console et en tapant en bas de l'écran.
L'objet x vient d'être créé à partir d'une chaîne au format JSON contenant une chaîne multiligne.
x.text s'affiche, montrant qu'il s'agit d'une chaîne de plusieurs 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.
Plus de tests avec
JSON.stringify
etJSON.parse
ont montré que l'interpréteur Javascript peut convertir un objet contenant des chaînes multilignes en JSON et le réanalyser sans aucun problème.Dans le passé, j'ai stocké l'intégralité des œuvres de Shakespeare en tant que propriété dans un objet JSON, puis je l'ai envoyé sur Internet, sans altération.
Exemple
Voici une chaîne de deux lignes entrée sur trois lignes
On peut afficher l'objet
donnant
ou la chaîne
donnant
La fin des lignes de la chaîne résulte de l'utilisation de \ n et les multiples lignes d'entrée sont obtenues en utilisant juste \ à la fin de la ligne.
En pratique, vous voudrez peut-être synchroniser vos fins de ligne avec celles de la chaîne, par exemple
Longueur de chaîne multiligne
Notez que la chaîne avec la nouvelle ligne n'est pas plus longue que la chaîne avec 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.
la source
x={"a":NaN}
etx={"a":"a \<literal newline with SHIFT>b"}
, qui ne sont pas JSON, mais sont JavaScriptUtilisez regex pour remplacer toutes les occurrences de
\r\n
avec\\n
.Cela a fonctionné pour moi dans scala.
la source
Si vous souhaitez utiliser Node.js, vous pouvez le faire:
vous pouvez importer avec Node.js et le convertir facilement en JSON comme ceci:
et vous obtenez:
comment cela fonctionne : vous utilisez Node.js pour charger un module JS, ce qui crée un objet JS qui peut facilement être stratifié JSON par Node.js. L'option -e évalue la chaîne et l'
-p
option renvoie le résultat de retour de la dernière opération Node.js à stdout.Si vous voulez charger un script .js qui se trouve dans un répertoire de travail différent, vous devez changer les chaînes "" et '':
la source
Essayez d'utiliser
base64
une valeur de chaîne codée. Travaillé pour moi la plupart du temps.après que la
base64
chaîne codée ressembleL'encodage et le décodage base64 sont disponibles dans toutes les langues.
la source
mettre le texte multiligne sur le fichier txt puis
(ça marche sur mongoDB)
la source
cat
.