JSON 형식으로 일부 데이터 파일을 작성 중이며 실제로 긴 문자열 값을 여러 줄로 나누고 싶습니다. 파이썬의 JSON 모듈을 사용하여 내가 사용 여부, 오류의 전체 많이 얻을 \
또는 \n
도피.
JSON에 여러 줄 문자열을 사용할 수 있습니까? 그것은 시각적으로 편안함을주는 것이기 때문에 편집기에서 단어 줄 바꿈을 켤 수 있다고 생각하지만 궁금합니다.
JSON 형식으로 일부 데이터 파일을 작성 중이며 실제로 긴 문자열 값을 여러 줄로 나누고 싶습니다. 파이썬의 JSON 모듈을 사용하여 내가 사용 여부, 오류의 전체 많이 얻을 \
또는 \n
도피.
JSON에 여러 줄 문자열을 사용할 수 있습니까? 그것은 시각적으로 편안함을주는 것이기 때문에 편집기에서 단어 줄 바꿈을 켤 수 있다고 생각하지만 궁금합니다.
답변:
JSON 은 실제 줄 바꿈을 허용하지 않습니다. 모든 줄 바꿈을로 바꾸어야합니다 \n
.
예 :
"first line
second line"
함께 저장할 수 있습니다 :
"first line\nsecond line"
노트 :
를 위해 Python
다음과 같이 작성해야합니다.
"first line\\nsecond line"
\\
백 슬래시를 피하기위한 곳 , 그렇지 않으면 파이썬은 \n
제어 문자 "새 줄"로 취급합니다
\n
하고 Curses를 통해 출력하는 경우) \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은 프로그래밍 언어가 아닙니다. 단지 데이터 표현 일뿐입니다. 문자열을 연결하도록 말할 수 없습니다. 그것의 (상당히 작은) 문법에는 여러 줄의 문자열을 나타내는 기능도 포함되지 않습니다.
어떤 종류의 전 처리기 (pre-processor)를 고안하는 것 (그리고이 문제를 해결하기 위해 자신의 언어를 효과적으로 구성하고 싶지 않다)은이 문제에 대한 일반적인 해결책은 없습니다. 데이터 형식을 변경할 수 있으면 문자열 배열을 대체 할 수 있습니다. 그렇지 않으면, 이것은 json이 사람이 읽을 수 있도록 설계되지 않은 수많은 방법 중 하나입니다.
사양을 확인하십시오 ! JSON 문법의 문자 생성은 다음 값을 가질 수 있습니다.
"
- 또는 \
- 또는 제어 문자\"
\\
\/
\b
\f
\n
\r
\t
\u
4 자리 숫자줄 바꿈은 "제어 문자"이므로 아니요, 문자열 내에 리터럴 줄 바꿈이 없을 수 있습니다. 그러나 당신의 어떤 조합을 사용하여 인코딩 할 수 있습니다 \n
그리고 \r
당신이 필요합니다.
이것은 정말 오래된 질문이지만 검색 에서이 문제를 발견했으며 문제의 원인을 알고 있다고 생각합니다.
JSON은 데이터에 "실제"줄 바꿈을 허용하지 않습니다. 줄 바꿈을 벗어날 수 있습니다. @YOU 의 답변 을 참조하십시오 . 질문에 따르면 파이썬에서 줄 바꿈을 이스케이프하려고 시도한 것처럼 보입니다. 줄 연속 문자 ( )를 사용하거나 이스케이프 를 사용 하는 것입니다."\"
"\n"
그러나 파이썬에서 문자열을 사용하는 경우 특수 이스케이프 문자 ( "\t"
, "\n"
)가 REAL 제어 문자로 변환됩니다! 이 "\n"
줄 바꿈 문자를 나타내는 ASCII 제어 문자로 바뀝니다. 정확하게 JSON에서 잘못된 문자입니다. (행 연속 문자는 개행을 간단히 제거합니다.)
따라서 파이썬이 문자를 이스케이프하지 못하게해야합니다. 원시 문자열을 사용하여 ( r
문자열처럼 문자열 앞에 입력 r"abc\ndef"
하거나 줄 바꿈 앞에 추가 슬래시 ( "abc\\ndef"
) 를 사용하여이를 수행 할 수 있습니다 .
위의 두 가지 모두 "\n"
실제 줄 바꿈 ASCII 제어 문자 로 바꾸지 않고 "\n"
두 개의 리터럴 문자로 남겨두고 JSON은 줄 바꿈 이스케이프로 해석 할 수 있습니다.
속성 값을 문자열 배열로 씁니다. https://gun.io/blog/multi-line-strings-in-json/ 여기에 주어진 예와 같습니다 . 도움이 될 것입니다.
다음과 같이 여러 줄 문자열에 대해 항상 문자열 배열을 사용할 수 있습니다.
{
"singleLine": "Some singleline String",
"multiline": ["Line one", "line Two", "Line Three"]
}
또한 배열을 쉽게 반복하여 콘텐츠를 여러 줄로 표시 할 수 있습니다.
json5 사용 (로더) https://json5.org/ 참조 -예제 (json5)
{
lineBreaks: "Look, Mom! \
No \\n's!",
}
JSON에 여러 줄 문자열을 사용할 수 있습니까?
예. 방금 F12 키를 누르고 콘솔을 클릭하고 화면 하단에 입력하여 Firefox 웹 브라우저로 이것을 테스트했습니다.
x={text:"hello\nworld"}
Object x는 여러 줄 문자열을 포함하는 JSON 형식 문자열에서 생성되었습니다.
console.log(x.text)
hello
world
여러 줄 문자열임을 나타내는 x.text가 표시됩니다.
이 두 가지 테스트는 Firefox의 Javascript 인터프리터가 JSON을 만들고 여러 줄 문자열로 사용하는 것을 기쁘게 생각합니다.
자세히 테스트 JSON.stringify
및 JSON.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')를 입력했지만 문자열에는 한 문자 만 저장됩니다.
x={"a":NaN}
및 x={"a":"a \<literal newline with SHIFT>b"}
JSON 아니지만,있는, 자바 스크립트
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에서 작동합니다)
cat
.