programing

JSON 문자열을 만들 때 특수 문자를 피하는 방법

javamemo 2023. 3. 21. 21:23
반응형

JSON 문자열을 만들 때 특수 문자를 피하는 방법

여기 제 끈이 있습니다

{
    'user': {
        'name': 'abc',
        'fx': {
            'message': {
                'color': 'red'
            },
            'user': {
                'color': 'blue'
            }
        }
    },
    'timestamp': '2013-10-04T08: 10: 41+0100',
    'message': 'I'mABC..',
    'nanotime': '19993363098581330'
}    

이 메시지에는 JSON에서 사용되는 따옴표와 같은 작은 따옴표가 포함되어 있습니다.제가 하는 일은 메시지 등의 사용자 입력에서 문자열을 채우는 것입니다.그래서 코드를 깨는 그런 특별한 시나리오에서 벗어나야 해요.그러나 문자열 치환 외에 HTML을 통해 올바른 메시지로 되돌릴 수 있는 방법이 있습니까?

나는 기본적인 주제에 대해 그렇게 높은 평가를 받은 질문에 높은 평가를 받은 잘못된 정보가 있다는 사실에 간담이 서늘하다.

JSON 문자열은 작은 따옴표로 묶을없습니다.스펙의 다양한 버전(Douglas Crockford 오리지널, ECMA 버전IETF 버전)에서는 모두 스트링을 큰따옴표로 묶어야 한다고 명시되어 있습니다.이는 이론적인 문제도 아니고 현재 받아들여지고 있는 답변과 같이 의견의 문제도 아닙니다.따옴표로 둘러싸인 문자열을 해석하려고 하면 실제 JSON 파서가 에러 아웃됩니다.

Crockford 및 ECMA 버전에는 예쁜 그림을 사용하여 문자열의 정의까지 표시되므로 요점이 명확하게 나타납니다.

JSON 규격의 문자열 정의를 나타내는 이미지

예쁜 그림에는 JSON 문자열 내의 모든 정규 이스케이프 시퀀스도 나열됩니다.

  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u그 다음에 4분음표가 붙는다.

여기서 말하는 다른 답변과는 달리\'는 JSON 문자열에서는 유효한 이스케이프 시퀀스가 아닙니다.JSON 문자열은 항상 큰따옴표로 묶기 때문에 그럴 필요는 없습니다.

마지막으로 JSON을 프로그래밍 방식으로 생성할 때 문자 이스케이프에 대해 스스로 생각할 필요는 없습니다(물론 JSON 기반 구성 파일을 수동으로 편집할 경우).대신 언어를 사용하는 네이티브 맵, 배열, 문자열, 숫자, 부울 및 늘 유형을 사용하여 인코딩하는 데이터 구조를 형성한 후 JSON 인코딩 함수를 사용하여 JSON으로 인코딩합니다.이러한 함수는 JavaScript, PHP, Python 등 사용하는 언어에 포함되어 있을 것입니다.이러한 기능이 내장되어 있지 않은 언어를 사용하고 있는 경우는, 사용하는 JSON 해석 및 인코딩 라이브러리를 찾을 수 있습니다.언어 또는 라이브러리 기능을 사용하여 JSON 간에 변환만 하면 JSON의 이스케이프 규칙을 알 필요도 없습니다.여기 잘못된 질문자는 이렇게 했어야 했어요.

JSON 문자열은 사양에 따라 이중 따옴표로 묶어야 하므로 이스케이프할 필요가 없습니다.'.
문자열에 해야 하는 JSON 문자열에서 를 사용할 수 .\★★★★★★ 。

JSON 에서 사용되는 특수 문자 리스트를 참조해 주세요.

\b  Backspace (ascii code 08)
\f  Form feed (ascii code 0C)
\n  New line
\r  Carriage return
\t  Tab
\"  Double quote
\\  Backslash character


는 러, 것, 것, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, 자, however, however, however, however, however, however, however, however, however, however, , however, however, however,\'.

는 다음과 같은 이유로 좋지 않습니다.

  • 사양에 반하다
  • 더 긴 JSON 유효 문자열입니다.

하지만 네가 원하든 원하지 않든 그건 효과가 있어.

새 리더의 경우 항상 json 문자열에 큰따옴표를 사용하십시오.

탈출할 수 있을지에 대해 하고 있다.'in a a a a 'string 리터럴을 지정합니다.여기에 더 큰 문제가 있습니다.따옴표로 묶은 문자열 리터럴은 유효하지 않습니다.JSON은 JavaScript에 기반하지만 같은 것은 아닙니다.JavaScript 코드 안에 오브젝트 리터럴을 쓰고 있다면 좋습니다.JSON이 실제로 필요하다면".

로 둘러싸인에서는 ""를 ' ( 리터럴을 "악악 in in를 합니다.\"

이러한 답변의 대부분은 질문에 대한 답변이 없거나 설명이 불필요하게 길어집니다.

네, 그럼 JSON은 큰따옴표만 사용하는군요.알겠습니다.

JQuery AJAX를 사용하여 JSON 데이터를 서버에 게시하고 나중에 동일한 정보를 반환하려고 했습니다.투고된 질문에 대한 최선의 해결책은 다음과 같습니다.

var d = {
    name: 'whatever',
    address: 'whatever',
    DOB: '01/01/2001'
}
$.ajax({
    type: "POST",
    url: 'some/url',
    dataType: 'json',
    data: JSON.stringify(d),
    ...
}

이것은 당신을 위한 캐릭터에서 벗어날 것입니다.

마크 애머리가 제안했던 훌륭한 답변입니다.

이게 도움이 됐으면 좋겠네요.

파티에 늦었을지도 모르지만, 이것은 작은 인용구를 해석/회피합니다(파싱 vs 이스케이프에 관한 싸움은 하고 싶지 않습니다).

JSON.parse("\"'\"")

"CHANGE: "CHANGE:
위해 \u+4-digit-hex-value \u+4-digit-hex-value로 바꿉니다.

: :하려면 , 를 \u0027 의 \u0027 의 \u0027 의 \u0027 의 \u0027 의 \u0027 의 \a 로 바꿉니다.
가 D\아미코 D\u0027 아미코

NICE 레퍼런스: http://es5.github.io/x7.html#x7.8.4

https://mathiasbynens.be/notes/javascript-escapes

템플릿 리터럴 사용 중...

var json = `{"1440167924916":{"id":1440167924916,"type":"text","content":"It's a test!"}}`;

encodeURIComponent()부호화를 실시합니다.

예:

var product_list = encodeURIComponent(JSON.stringify(product_list));

웹 서버가 자동으로 동일한 작업을 수행하므로 디코딩할 필요가 없습니다.

json을 위해 이중 따옴표로 묶은 문자열 내에서 단일 따옴표를 허용하려면 단일 따옴표를 이중 따옴표로 묶어야 합니다.{"X": "What's the question"} ==> {"X": "What's the question"}

https://codereview.stackexchange.com/questions/69266/json-conversion-to-single-quotes

\' 시퀀스가 잘못되었습니다.

AlexB의 투고에 대해서:

 \'  Apostrophe or single quote
 \"  Double quote

싱글 따옴표는 json 합니다.
이중 따옴표로 묶은 합니다.

예:

'Bart\'s car'       -> valid
'Bart says \"Hi\"'  -> invalid

언급URL : https://stackoverflow.com/questions/19176024/how-to-escape-special-characters-in-building-a-json-string

반응형