JSONの複数行文字列

JSONフォーマットでいくつかのデータファイルを書いているのですが、とても長い文字列の値を複数行に分割したいのです。pythonのJSONモジュールを使うと、エスケープに `を使ってもn` を使っても、たくさんのエラーが出る。

JSONで複数行の文字列を持つことは可能ですか?ほとんど見た目の快適さのためなので、エディターでワードラップをオンにすればいいのでしょうが、ちょっと興味があります。

質問へのコメント (4)

JSONは本当の改行を許さない。すべての改行を n で置き換える必要がある。

例えば

最初の行 二行目

で保存できる:

で保存できる。

注意してください:

Python`の場合は、次のように記述する:

と書くべきである。

ここで、`` はバックスラッシュをエスケープするための文字です。 を制御文字 "改行&quot として扱う;

解説 (8)

私は小さなNode.jsプロジェクトでこれをしなければならなかったが、このような回避策を見つけた:


{
 "modify_head": [

  "<script type='text/javascript'>",
  "",
  "</script>"

 ],

 "modify_body": [

  "<input type='text' id='inputtext'>
解説 (7)

仕様をチェックしてください。! JSON文法の_char_プロダクションは、次の値を取ることができます。

-any-Unicode-character-except-"-or-\-or-control-character

  • \ "
  • \\
  • \ /
  • \ b
  • \ f
  • \ n
  • \ r
  • \ t。 -\ u 4-hex-digits

ニューラインは「コントロール文字」なので、いいえ、文字列内に文字通りのニューラインがない場合があります。 ただし、必要な「\ n」と「\ r」の組み合わせを使用してエンコードできます。

解説 (5)

残念ながら、ここでの回答の多くは、文字列データに改行文字を配置する方法の問題に対応しています。 問題は、コードの複数の行に文字列値を分割して、コードをより見栄えよくする方法です。 (そして、これを認識する回答でさえ、データ表現を自由に変更できると仮定する「解決策」を提供しますが、多くの場合、変更できません。)。

さらに悪いニュースは、良い答えがないことです。

多くのプログラミング言語では、線を越えた分割文字列を明示的にサポートしていなくても、文字列の連結を使用して目的の効果を得ることができます。コンパイラがひどくない限り、これは問題ありません。

しかし、jsonはプログラミング言語ではありません。単なるデータ表現です。 文字列を連結するように言うことはできません。 また、その(かなり小さい)文法には、複数の行で文字列を表すための機能も含まれていません。

ある種のプリプロセッサを考案する(そして私は、この問題を解決するために自分の言語を効果的に構成したくない)ことを除いて、この問題に対する一般的な解決策はありません。 データ形式を変更できる場合は、文字列の配列を置き換えることができます。 そうでなければ、これはjsonが人間の読みやすさのために設計されていない多くの方法の1つです。

解説 (3)

JSONは読みやすさのために改行を許可していません。

あなたの最善の策は、あなたのためにラインラップするIDEを使用することです。

解説 (1)

これは本当に古い質問なんだけど、検索でこれを見つけたんだ。

JSONはデータ中の改行を許しません。YOU]2回答を参照してください。質問によると、Pythonで改行をエスケープするには、行継続文字(" \")を使用するか、" \n"をエスケープとして使用するかの2つの方法があるようです。

ただし、Pythonで文字列を使用する場合、特殊なエスケープ文字(" \t", " \n")はREAL制御文字に変換されます!は改行文字を表すASCII制御文字に置き換えられますが、これはまさにJSONでは不正な文字です。(行の継続文字については、単に改行が取り除かれます)。

そのため、Pythonが文字をエスケープしないようにする必要があります。これを行うには、生の文字列を使用する(r"abcndef"のように文字列の前にrを置く)か、改行の前に余分なスラッシュを含める("abcndef")。

上記のどちらも、" \n" を実際の改行 ASCII 制御文字に置き換える代わりに、" \n" を 2 つのリテラル文字のままにして、JSON が改行エスケープとして解釈できるようにします。

解説 (0)

JSONでマルチライン文字列を使用することは可能ですか??

はい。 F12を押し、コンソールをクリックして画面の下部に入力して、Firefox Webブラウザーでこれをテストしました。

x={text:"hello\nworld"}

オブジェクトxは、複数行の文字列を含むJSON形式の文字列から作成されました。

console.log(x.text)
hello
world

x.textが表示され、複数行の文字列であることを示します。

これらの2つのテストは、FirefoxのJavascriptインタープリターがマルチライン文字列を使用してJSONを作成して使用できることを嬉しく思っていることを示しています。

JSON.stringifyJSON.parseを使用したその他のテストでは、Javascriptインタープリターがマルチライン文字列を含むオブジェクトをJSONに変換し、まったく問題なく再度解析できることが示されました。

私は過去にシェイクスピアの全作品をJSONオブジェクトにプロパティとして保存し、それをインターネット経由で破損せずに送信しました。

例。 =======。

3行で入力した2行の文字列です。

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

オブジェクトを表示できます。

console.log(x)

与える。

Object { text: "experts\nexchange" }

または文字列。

console.log(x.text)

与える。

experts
exchange

文字列の行の終わりは、\ nを使用した結果です。 複数の入力行は、行末の\を使用して実現されます。

実際には、行末を文字列内の行末と同期することをお勧めします。

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

マルチラインストリングの長さ。 ========================。

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

newlineの文字列は、スペースのある文字列よりも長くはないことに注意してください。 キーボードで2文字( '\'と 'n')が入力されましたが、文字列には1文字しか保存されません。

解説 (1)

文字列の配列としてプロパティ値を書き込みます。 ここで与えられた例のようにhttps://gun.io/blog/multi-line-strings-in-json/。 これは役立ちます。

次のようなマルチライン文字列には、いつでも文字列の配列を使用できます。

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

また、配列を簡単に反復して、コンテンツを複数行で表示することもできます。

解説 (2)

regexを使用して、 \ r \ nのすべての出現を \\ nに置き換えます。

これはスカラで私のために働いた。

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

json5(ローダー)を使用します。https://json5.org/-example(json5による)を参照してください

{
  lineBreaks: "Look, Mom! \
No \\n's!",
}
解説 (1)

Node.jsを喜んで使用する場合は、次のことができます。

module.exports = {

  multilineStr: `

     dis my life 
     it's now or never

  `

}

Node.jsでインポートして、次のように簡単にJSONに変換できます。

echo `node -pe 'JSON.stringify(require("./json-mod.js"))'`

そしてあなたは得る:

{"multilineStr":"\n \n dis my life\n it's now or never\n \n "}

仕組み:Node.jsを使用してJSモジュールをロードします。JSモジュールは、Node.jsで簡単にJSON文字列化できるJSオブジェクトを作成します。 -eオプションは文字列を評価し、 -pオプションは最後のNode.js操作の戻り結果をstdoutにエコーします。

別の作業ディレクトリにある.jsスクリプトをロードする場合は、「」文字列と「」文字列を切り替える必要があります。

my_script='../json-mod.js'
echo `node -pe "JSON.stringify(require('$my_script'))"`
解説 (1)

base64エンコードされた文字列値を使用してみてください。 ほとんどの場合私のために働いた。

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

base64の後、エンコードされた文字列は次のようになります。

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

base64のエンコーディングとデコードは、すべての言語で利用できます。

解説 (2)

マルチラインテキストをtxtファイルに配置します。

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

(それはmongoDBにあります)。

解説 (1)