programing

문자열을 작은 따옴표로 JSON으로 구문 분석하시겠습니까?

i4 2023. 4. 6. 20:46
반응형

문자열을 작은 따옴표로 JSON으로 구문 분석하시겠습니까?

나는 끈이 있다

str = "{'a':1}";
JSON.parse(str);
VM514:1 Uncaught SyntaxError: Unexpected token '(…)

위의 문자열(str)을 JSON 오브젝트로 해석하려면 어떻게 해야 합니까?

이것은 단순한 해석처럼 보입니다.근데 안 되네.

JSON 표준에서는 큰따옴표가 필요하며 작은따옴표는 사용할 수 없습니다.파서도 사용할 수 없습니다.

문자열에 이스케이프된 작은 따옴표가 없는 단순한 케이스(일반적으로 불가능하지만 JSON이 아님)가 있는 경우 단순화할 수 있습니다.str.replace(/'/g, '"')유효한 JSON을 얻을 수 있습니다.

오래된 투고인 것은 알지만, 이 목적으로 JSON5를 사용할 수 있습니다.

<script src="json5.js"></script>
<script>JSON.stringify(JSON5.parse('{a:1}'))</script>

JSON이 사용자 입력이 아닌 안전한 제어 하에 있다고 확신하는 경우 JSON을 평가할 수 있습니다.Eval에서는 따옴표가 없는 속성 이름뿐만 아니라 모든 따옴표 유형을 사용할 수 있습니다.

var str = "{'a':1}";
var myObject = (0, eval)('(' + str + ')');

eval 파서의 동작에 따라 추가 괄호가 필요합니다.Eval은 사용자가 제어할 수 있는 데이터에 사용될 때 나쁜 것이 아닙니다.JSON.parse 와 eval() 의 차이에 대한 자세한 내용은 JSON.parse vs. eval()참조하십시오.

JSON에서는 키에 작은 따옴표를 사용할 수 없습니다.큰따옴표를 사용해야 합니다.

사용 사례의 경우, 이것이 가장 쉬운 해결책이 될 수 있습니다.

str = '{"a":1}';

출처:

속성에서 따옴표가 필요한 경우 큰따옴표를 사용해야 합니다.모든 속성 이름은 큰따옴표로 둘러싸야 합니다.

var str =  "{'a':1}";
str = str.replace(/'/g, '"')
obj = JSON.parse(str);
console.log(obj);

이것으로 나는 그 문제를 해결했다.

다음과 같은 경우:

var div = document.getElementById("result");

var str = "{'a':1}";
  str = str.replace(/\'/g, '"');
  var parsed = JSON.parse(str);
  console.log(parsed);
  div.innerText = parsed.a;
<div id="result"></div>

// regex uses look-forwards and look-behinds to select only single-quotes that should be selected
const regex = /('(?=(,\s*')))|('(?=:))|((?<=([:,]\s*))')|((?<={)')|('(?=}))/g;
str = str.replace(regex, '"');
str = JSON.parse(str);

다른 답변은 단순히 충분한 경우에 효과가 없습니다.위의 인용 사례와 같은 경우:"title": "Mama's Friend"regex 를 사용하지 않는 한 아포스트로피는 순수하게 변환됩니다.JSON5는 작은 따옴표를 삭제해야 하므로 유사한 문제가 발생합니다.

경고: 저는 이것이 합리적으로 발생하는 모든 상황과 호환되며 다른 답변보다 훨씬 자주 작동한다고 생각하지만, 이론적으로는 여전히 깨질 수 있습니다.

단일 따옴표로 묶인 값이 표시되는 것으로 가정할 경우 다음과 같이 하십시오.

str = str.replace(/\'/g, '"');

다음과 같이 싱글 소켓의 표시를 유지할 수 있습니다.

str = str.replace(/\'/g, '\&apos;\');

이 값은 HTML에 상당합니다.single quote.

json = ( new Function("return " + jsonString) )(); 

언급URL : https://stackoverflow.com/questions/36038454/parsing-string-as-json-with-single-quotes

반응형