2017-04-26 12 views
0

JSON을 JS 객체로 파싱하려고하지만 값에 "\"문자와 4자를 항상 포함하는 하나의 속성에 문제가 있습니다. 예 : 나는 그것을 분석하면 내가 얻을JSON.parse() 메서드에서 ""구문 분석을 피하는 방법

"key": "Z13g\u003d" 

:

"key": "Z13g=" 

이 문제를 해결 할 수있는 쉬운 방법이 있나요 문자열은 그런 일을 본다?

+2

은 왜 그 첫번째 장소에있는 문제? '\ u003d'는 JSON 문자열에'= '를 표현할 수있는 방법입니다. 아마도 JSON을 처음 만들었을 때 문제가 슬래시를 피하지 못했을 것입니다. – Quentin

+2

'\ u003d'는 JSON에서'= '문자를 나타내는 한 방법입니다. 파서가 제대로 작동하고 있습니다. – cdhowie

+0

@Quentin 첫 번째 예제는 원래 문자열이 어떻게 보이고 두 번째로 javascript 객체로 파싱 한 후 어떻게 보이는지를 보여줍니다. –

답변

1

JavaScript에서 "\ u003d"와 같은 문자열이 있으면 구문 분석 된 문자열 "="과 구별 할 수 없습니다. String.replace 함수도 문자열에 \ 문자를 찾지 않습니다.

그러나 백 슬래시 문자가 포함 된 문자열을 실제로 나타내려면 다른 백 슬래시로 이스케이프 처리해야합니다.

"\u003d"은 문자열 값 "="을 나타내며 "\\u003d""\u003d" 문자열 값을 나타냅니다.

그러나 JSON.parse을 호출하면 상황이 더욱 복잡해집니다. 문자열 값을 다시 파싱하므로 "\\u003d""="으로 변환됩니다.

이 문제를 해결하려면 백 슬래시를 두 번 이스케이프 처리해야하므로 문자열 값은 "\\\\u003d"이됩니다. 구문 분석기는 "=" 대신 "\u003d"으로 변환합니다.

console.log(JSON.parse("\"\u003d\"")); // "\u003d" -> "=" 
 
console.log(JSON.parse("\"\\u003d\"")); // "\\u003d" -> "=" 
 
console.log(JSON.parse("\"\\\\u003d\"")); // "\\\\u003d" -> "\u003d"