IT story

JSON의 여러 줄 문자열

hot-time 2020. 2. 9. 19:25
반응형

JSON의 여러 줄 문자열


JSON 형식으로 일부 데이터 파일을 작성 중이며 실제로 긴 문자열 값을 여러 줄로 나누고 싶습니다. 파이썬의 JSON 모듈을 사용하여 내가 사용 여부, 오류의 전체 많이 얻을 \또는 \n도피.

JSON에 여러 줄 문자열을 사용할 수 있습니까? 그것은 시각적으로 편안함을주는 것이기 때문에 편집기에서 단어 줄 바꿈을 켤 수 있다고 생각하지만 궁금합니다.


JSON 은 실제 줄 바꿈을 허용하지 않습니다. 모든 줄 바꿈을로 바꾸어야합니다 \n.

예 :

"first line second line"

함께 저장 가능 :

"first line\nsecond line"

노트 :

를 위해 Python다음과 같이 작성해야합니다.

"first line\\nsecond line"

\\백 슬래시를 피하기위한 , 그렇지 않으면 파이썬은 \n제어 문자 "새 줄"로 취급합니다


작은 Node.js 프로젝트를 위해이 작업 을 수행해야 했으며이 해결 방법을 찾았습니다 .

{
 "modify_head": [

  "<script type='text/javascript'>",
  "<!--",
  "  function drawSomeText(id) {",
  "  var pjs = Processing.getInstanceById(id);",
  "  var text = document.getElementById('inputtext').value;",
  "  pjs.drawText(text);}",
  "-->",
  "</script>"

 ],

 "modify_body": [

  "<input type='text' id='inputtext'></input>",
  "<button onclick=drawSomeText('ExampleCanvas')></button>"

 ],
}

이것은 나에게 깔끔하게 보입니다. 어쨌든 큰 따옴표를 사용해야한다는 점에서 아파트. 그렇지 않으면 아마도 YAML을 사용할 수는 있지만 다른 함정이 있으며 기본적으로 지원되지 않습니다. 구문 분석되면 각 문자열 다음에 줄 바꿈을 원하는지 여부에 따라 myData.modify_head.join('\n')또는을 사용 myData.modify_head.join()합니다.


사양을 확인하십시오 ! JSON 문법의 문자 생성은 다음 값을 가질 수 있습니다.

  • 어떤-유니 코드 문자 except- "- 또는 \- 또는 제어 문자
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u 4 자리 숫자

줄 바꿈은 "제어 문자"이므로 아니요, 문자열 내에 리터럴 줄 바꿈이 없을 수 있습니다. 그러나 당신의 어떤 조합을 사용하여 인코딩 할 수 있습니다 \n그리고 \r당신이 필요합니다.


불행히도 여기의 많은 답변은 문자열 데이터에 줄 바꿈 문자를 넣는 방법에 대한 질문을 다룹니다. 문제는 문자열 값을 여러 줄의 코드로 분할하여 코드를 더 멋지게 만드는 방법입니다. (그리고 이것을 인식하는 답변조차도 데이터 표현을 자유롭게 변경할 수 있다고 가정하는 "솔루션"을 제공하지만 많은 경우에는 그렇지 않습니다.)

더 나쁜 소식은 좋은 대답이 없다는 것입니다.

많은 프로그래밍 언어에서 명시 적으로 줄간에 문자열 나누기를 지원하지 않더라도 문자열 연결을 사용하여 원하는 효과를 얻을 수 있습니다. 컴파일러가 끔찍하지 않으면 괜찮습니다.

그러나 json은 프로그래밍 언어가 아닙니다. 단지 데이터 표현 일뿐입니다. 문자열을 연결하도록 말할 수 없습니다. 그것의 (상당히 작은) 문법에는 여러 줄의 문자열을 나타내는 기능도 포함되지 않습니다.

어떤 종류의 전 처리기 (pre-processor)를 고안하는 것 (그리고이 문제를 해결하기 위해 자신의 언어를 효과적으로 구성하고 싶지 않다)은이 문제에 대한 일반적인 해결책은 없습니다. 데이터 형식을 변경할 수 있으면 문자열 배열을 대체 할 수 있습니다. 그렇지 않으면, 이것은 json이 사람이 읽을 수 있도록 설계되지 않은 수많은 방법 중 하나입니다.


JSON은 가독성을 위해 줄 바꿈을 허용하지 않습니다.

가장 좋은 방법은 줄 바꿈 할 IDE를 사용하는 것입니다.


이것은 정말 오래된 질문이지만 검색 에서이 문제를 발견했으며 문제의 원인을 알고 있다고 생각합니다.

JSON은 데이터에 "실제"줄 바꿈을 허용하지 않습니다. 개행을 피할 수 있습니다. @YOU답변참조하십시오 . 질문에 따르면 파이썬에서 줄 바꿈을 이스케이프하려고 시도한 것처럼 보입니다 : 줄 연속 문자 ( )를 사용하거나 이스케이프를 사용합니다."\""\n"

그러나 파이썬에서 문자열을 사용하는 경우 특수 이스케이프 문자 ( "\t", "\n")가 REAL 제어 문자로 변환됩니다! "\n"개행 문자를 나타내는 ASCII 제어 문자로 대체되며, 이는 정확하게 JSON에서 잘못된 문자입니다. (행 연속 문자는 개행을 간단히 제거합니다.)

따라서 파이썬이 문자를 이스케이프하지 못하게해야합니다. 원시 문자열을 사용하여 ( r문자열처럼 문자열 앞에 입력 r"abc\ndef"하거나 줄 바꿈 앞에 추가 슬래시 ( "abc\\ndef") 를 사용하여이를 수행 할 수 있습니다 .

위의 두 가지 모두 "\n"실제 줄 바꿈 ASCII 제어 문자 로 바꾸지 않고 "\n"두 개의 리터럴 문자로 남겨두고 JSON은 줄 바꿈 이스케이프로 해석 할 수 있습니다.


JSON에 여러 줄 문자열을 사용할 수 있습니까?

예. 방금 F12 키를 누르고 콘솔을 클릭하고 화면 하단에 입력하여 Firefox 웹 브라우저로 이것을 테스트했습니다.

x={text:"hello\nworld"}

Object x는 여러 줄 문자열을 포함하는 JSON 형식 문자열에서 생성되었습니다.

console.log(x.text)
hello
world

여러 줄 문자열임을 나타내는 x.text가 표시됩니다.

이 두 가지 테스트는 Firefox의 Javascript 인터프리터가 JSON을 만들고 여러 줄 문자열로 사용하는 것을 기쁘게 생각합니다.

자세히 테스트 JSON.stringifyJSON.parse자바 스크립트 인터프리터 보였다는 JSON에 여러 줄 문자열을 포함하는 개체를 변환하고 전혀 문제없이 다시 구문 분석 할 수 있습니다.

과거에는 셰익스피어의 전체 작품을 JSON 객체의 속성으로 저장 한 다음 인터넷을 통해 그대로 전송했습니다.

다음은 세 줄로 입력 된 두 줄 문자열입니다.

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

줄 바꿈이있는 문자열은 공백이있는 문자열보다 길지 않습니다. 키보드에 두 문자 ( '\'및 'n')를 입력하더라도 문자열에는 한 문자 만 저장됩니다.


속성 값을 문자열 배열로 씁니다. https://gun.io/blog/multi-line-strings-in-json/ 여기에 주어진 예와 같습니다 . 도움이 될 것입니다.

다음과 같이 여러 줄 문자열에 대해 항상 문자열 배열을 사용할 수 있습니다.

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

또한 배열을 쉽게 반복하여 콘텐츠를 여러 줄로 표시 할 수 있습니다.


사용의 모든 항목을 대체하기 위해 정규식 \r\n과를 \\n.

이것은 scala에서 나를 위해 일했습니다.

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

json5 사용 (로더) https://json5.org/ 참조 -예제 (json5)

{
  lineBreaks: "Look, Mom! \
No \\n's!",
}

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 모듈을로드하면 Node.js로 쉽게 JSON으로 묶을 수있는 JS 객체가 생성됩니다. -e 옵션은 문자열을 평가하고이 옵션 -p은 마지막 Node.js 조작의 리턴 결과를 stdout으로 에코합니다.

다른 작업 디렉토리에있는 .js 스크립트를로드하려면 ""및 ''문자열을 전환해야합니다.

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

base64인코딩 된 문자열 값을 사용해보십시오 . 대부분 나를 위해 일했습니다.

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

이후 base64같은 인코딩 된 문자열의 모습

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

base64 인코딩 및 디코딩은 모든 언어로 제공됩니다.


txt 파일에 여러 줄 텍스트를 넣은 다음

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

(mongoDB에서 작동합니다)

참고 URL : https://stackoverflow.com/questions/2392766/multiline-strings-in-json



반응형