JSON 값에 여러 줄 문자열이 포함될 수 있습니까?


114

Java 프로그램에서 읽을 JSON 파일을 작성 중입니다. 조각은 다음과 같습니다 ...

{
  "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"
    }
  }
}


17
나는이 더 직렬화 된 JSON 파일의 가독성에 대해하고 생각 하지 로드 된 데이터에서 줄 바꿈에 대해 (따라서, 아니 중복 된 JSON에서 여러 줄 문자열 ). 긴 문자열이있는 구성 파일로 JSON을 사용하는 것과 비슷하며, 가독성을 위해 누군가 텍스트 편집기를 통해 편집하는 경우 문자열을 하드 랩핑하는 것이 도움이됩니다.
zashu

2
@zashu : 대부분의 텍스트 편집기에는 소프트 랩 기능이 있습니다. 이는 하드 코딩 된 선 너비보다 즉시 더 유용합니다.
궤도에서 가벼운 경주

4
@LightnessRacesinOrbit가 이렇게 긴 줄이있는 파일에서 git diffs (또는 병합 충돌 해결)를 실행하는 것도 고통입니다.
Hubert Kario 2015

1
이것은 OP의 질문을 인용하여 JSON의 Multiline 문자열과 유사합니다. " JSON에서 여러 줄 문자열을 가질 수 있습니까? 대부분 시각적 편의를위한 것이므로 편집기에서 단어 줄 바꿈을 켤 수 있다고 가정합니다. 그냥 좀 궁금 해요 ... "
앙드레 Figueiredo의

답변:


61

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

  • 모든 유니 코드 문자 제외 "- \또는 - 또는 제어 문자
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u 4 자리 16 진수

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

JSONLint의 당신의 JSON이 유효 도구 확인한다.


업데이트 : 실제로 데이터에 줄 바꿈을 포함하지 않고 JSON 구문 안에 줄 바꿈을 작성하려면 두 배로 운이 좋지 않습니다. JSON은 어느 정도 인간에게 친숙한 것이지만 여전히 데이터 이며 해당 데이터에 임의의 형식을 적용하려고합니다. 그것은 JSON에 관한 것이 아닙니다.


32

정확한 요구 사항은 확실하지 않지만 '가독성'을 향상시키는 한 가지 가능한 솔루션은 배열로 저장하는 것입니다.

{
  "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."]
    }
  }
}

}

필요할 때마다 다시 조인

result.join(" ")

13
그러나 그것은 의미가 없습니다. 추상화 유출입니다. 이 방식으로 지정된 데이터 형식은 본질적으로 손상되었다고 생각합니다.
궤도의 가벼운 경주

4
문자열 가독성을 높이기 위해 이런 식으로 API 또는 JSON 문서를 디자인하는 것을 상상할 수 없습니다 (내가 추측하는 디버깅 목적으로 만) : | ....
Adam Dyga

"이러한 방식으로 지정된 데이터 형식은 본질적으로 손상되었다고 생각합니다." 그러나 이것이 테스트 케이스라는 것을 고려하십시오. 문자열을 하드 코딩하려면 속성 파일이 필요할 것입니다. 개인적으로 정상적인 상황에서는 "실제"데이터를 JSON에 저장하지 않습니다. 그러나 이것이 테스트가 아닌 테스트로 이동하는 간단한 방법이라면 시도해보십시오.
sf_jeff dec.

@AdamDyga 실제로 json 파일을 CVS에 저장하는 데 유용 할 수 있습니다. 여기서 델타 단위는 라인입니다.
yota

7

좋은 해결책은 아니지만 hjson 도구를 사용해 볼 수 있습니다 . 링크 . 편집기에서 여러 줄로 된 텍스트를 작성한 다음 올바른 유효한 JSON 형식으로 변환 할 수 있습니다. 참고 : 새 줄에 '\ n'문자를 추가하지만 "모두 바꾸기 .."기능을 사용하여 텍스트 편집기에서 간단히 삭제할 수 있습니다.

추신 : 질문에 대한 의견이어야하지만 충분한 repo가 ​​없습니다.


실제로 좋은 생각입니다. Hjson의 버전을 제어하고 필요에 따라 JSON으로 변환합니다.
궤도의 경쾌함 레이스

3

내가 이해할 수 있듯이 질문은 제어 기호로 문자열을 전달하는 json방법이 아니라 편집기 제어 기호로 문자열을 분할 할 수있는 파일에 json을 저장하고 복원하는 방법에 관한 것입니다.

여러 줄 문자열을 파일에 저장하려는 경우 파일에 유효한 json개체가 저장되지 않습니다 . 그러나 json프로그램에서만 파일 을 사용하는 경우 원하는대로 데이터를 저장하고 프로그램에로드 할 때마다 파일에서 모든 줄 바꿈을 수동으로 제거한 다음 json 파서로 전달할 수 있습니다.

또는, 더 나은 방법은 json데이터 소스 파일을 원하는대로 편집 한 다음 json프로그램이 사용할 유효한 파일 에 대한 유틸리티를 사용하여 모든 새 줄을 제거 할 수 있습니다.


2

나는 그것이 당신이 사용하는 json 인터프리터에 달려 있다고 믿습니다 ... 일반 자바 스크립트에서는 줄 종결자를 사용할 수 있습니다.

{
  "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."
    }
  }
}

이것은 정확하지만 들여 쓰기 공백은 다음과 같이 출력됩니다. a\ c=> a c.
Andre Figueiredo

1
JavaScript에는이를 수용하는 "JSON 인터프리터"가 없습니다. 문자열에서 JSON 만 사용할 수 있습니다. 사실, 문자열 리터럴 내부에 JSON을 제공했다면이 접근 방식을 취할 수 있지만 이는 특이한 일입니다. JSON과 JavaScript의 실제 객체 선언을 혼동하고 있습니까?
궤도의 경쾌한 레이스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.