131 votes

Une valeur JSON peut-elle contenir une chaîne de caractères multiligne ?

J'écris un fichier JSON qui sera lu par un programme Java. Le fragment est le suivant...

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : "this is a very long line which is not easily readble.
                  so i would like to write it in multiple lines.
                  but, i do NOT require any new lines in the output.
                  I need to split the string value in this input file only.
                  such that I don't require to slide the horizontal scroll again and again while verifying the correctness of the statements.
                  the prev line, I have shown, without splitting just to give a feel of my problem"
    }
  }
}

72voto

Par la spécification la grammaire JSON char peut prendre les valeurs suivantes :

  • tout caractère Unicode, sauf " -ou- \ -ou-contrôle du caractère
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u quatre chiffres hexadécimaux

Les nouvelles lignes sont des "caractères de contrôle", donc non, vous pouvez pas avoir un saut de ligne littéral dans votre chaîne. Cependant, vous pouvez l'encoder en utilisant une combinaison quelconque de \n y \r dont vous avez besoin.

Le site JSONLint confirme que votre JSON est invalide.


Et si vous souhaitez écrire des traits de suspension dans votre syntaxe JSON sans inclure de traits de suspension dans les données, vous êtes doublement malchanceux. Bien que JSON soit destiné à être convivial jusqu'à un certain point, il est toujours données et vous essayez d'appliquer un formatage arbitraire à ces données. Ce n'est absolument pas le but de JSON.

39voto

Brian McAuliffe Points 303

Je ne suis pas sûr de vos besoins exacts, mais une solution possible pour améliorer la "lisibilité" est de les stocker sous forme de tableau.

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : ["this is a very long line which is not easily readble.",
                  "so i would like to write it in multiple lines.",
                  "but, i do NOT require any new lines in the output."]
    }
  }
}

}

Puis, rejoignez-le au fur et à mesure que le besoin s'en fait sentir avec

    result.join(" ")

9voto

CodeMonkey Points 91

Ce n'est pas une très bonne solution, mais vous pouvez essayer l'option hjson outil . Il vous permet d'écrire du texte multi-lignes dans l'éditeur et le convertit ensuite au format JSON valide approprié.

Note : il ajoute \n pour les nouvelles lignes, mais vous pouvez simplement les supprimer dans n'importe quel éditeur de texte avec la fonction "Remplacer tout ".

4voto

Elric Best Points 51

Je crois que cela dépend de l'interpréteur de json que vous utilisez... en javascript pur, vous pouvez utiliser des terminaisons de ligne.

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : "this is a very long line which is not easily readble. \
                  so i would like to write it in multiple lines. \
                  but, i do NOT require any new lines in the output."
    }
  }
}

3voto

JustAnotherCurious Points 2129

Si j'ai bien compris, la question n'est pas de savoir comment passer une chaîne de caractères avec des symboles de contrôle à l'aide de la fonction json mais comment stocker et restaurer json dans un fichier où vous pouvez diviser une chaîne avec les symboles de contrôle de l'éditeur.

Si vous voulez stocker une chaîne de caractères multiligne dans un fichier, votre fichier ne stockera pas la chaîne de caractères valide. json objet. Mais si vous utilisez votre json dans votre programme uniquement, vous pouvez alors stocker les données comme vous le souhaitez et supprimer manuellement toutes les nouvelles lignes du fichier à chaque fois que vous le chargez dans votre programme et que vous le passez ensuite à l'analyseur json.

Ou, alternativement, ce qui serait mieux, vous pouvez avoir votre json des fichiers de sources de données dans lesquels vous modifiez une piqûre comme vous le souhaitez, puis supprimez toutes les nouvelles lignes avec un utilitaire pour la valide json que votre programme utilisera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X