JavaScript (또는 jQuery)를 사용하여 객체를 설명하는 문자열을 JSON 문자열로 변환하려면 어떻게해야합니까?
예 :이 (변환 하지 유효한 JSON 문자열) :
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"
이것으로 :
str = '{ "hello": "world", "places": ["Africa", "America", "Asia", "Australia"] }'
eval()
가능한 경우 사용을 피하고 싶습니다 .
답변
문자열이 원본을 신뢰할 경우 , 당신은 사용할 수있는 eval
다음 JSON.stringify
결과를. 이처럼 :
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
var json = JSON.stringify(eval("(" + str + ")"));
이 때주의 eval
객체 리터럴은 괄호에 싸여되어야한다 그렇지 않으면 중괄호 블록 대신 대상으로 분석된다.
또한 유효한 JSON으로 객체를 인코딩하여 구문 분석, 인코딩 및 다시 구문 분석하지 않아도되는 것이 훨씬 낫다는 질문 아래 의견에 동의 합니다 . HTML은 작은 따옴표 속성을 지원합니다 (문자열 안에 작은 따옴표를 HTML로 인코딩해야합니다).
답변
문자열이 유효한 JSON이 아니므로 JSON.parse
(또는 jQuery ‘s $.parseJSON
)가 작동하지 않습니다.
한 가지 방법은 eval
“유효하지 않은”JSON을 “구문 분석”한 다음 stringify
유효한 JSON으로 “변환”하는 것입니다.
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"
str = JSON.stringify(eval('('+str+')'));
잘못된 JSON을 “수정”하는 대신 먼저 유효한 JSON으로 시작하는 것이 좋습니다. 어떻게 str
생성되고 있는지, 생성되기 전에 수정해야합니다.
편집 : 당신은 (주석에서)이 문자열은 데이터 속성에 저장되어 있다고 말했습니다.
<div data-object="{hello:'world'}"></div>
나는 당신이 여기에 그것을 고치라고 제안하므로 JSON.parse
d 일 수 있습니다 . 먼저 키와 값을 모두 큰 따옴표로 묶어야합니다. 다음과 같아야합니다 (HTML의 작은 따옴표로 묶은 속성이 유효 함).
<div data-object='{"hello":"world"}'></div>
이제 JSON.parse
(또는 jQuery ‘s $.parseJSON
)를 사용할 수 있습니다 .
var str = '{"hello":"world"}';
var obj = JSON.parse(str);
답변
답변
아래 링크에서 간단한 코드를 사용하십시오.
http://msdn.microsoft.com/es-es/library/ie/cc836466%28v=vs.94%29.aspx
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
그리고 반대로
var str = JSON.stringify(arr);
답변
이 작은 함수가 잘못된 JSON 문자열을 유효한 것으로 변환하기를 바랍니다.
function JSONize(str) {
return str
// wrap keys without quote with valid double quote
.replace(/([\$\w]+)\s*:/g, function(_, $1){return '"'+$1+'":'})
// replacing single quote wrapped ones to double quote
.replace(/'([^']+)'/g, function(_, $1){return '"'+$1+'"'})
}
결과
var invalidJSON = "{ hello: 'world',foo:1, bar : '2', foo1: 1, _bar : 2, $2: 3, 'xxx': 5, \"fuz\": 4, places: ['Africa', 'America', 'Asia', 'Australia'] }"
JSON.parse(invalidJSON)
//Result: Uncaught SyntaxError: Unexpected token h VM1058:2
JSON.parse(JSONize(invalidJSON))
//Result: Object {hello: "world", foo: 1, bar: "2", foo1: 1, _bar: 2…}
답변
주의해서 사용하십시오 eval()
:
function strToJson(str) {
eval("var x = " + str + ";");
return JSON.stringify(x);
}
전화 :
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
alert( strToJson(str) );
답변
면책 조항 : 집에서 또는 다른 개발자가 당신을 심각하게 생각하는 것을 요구하지 마십시오 :
JSON.stringify(eval('(' + str + ')'));
나는 그것을했다.
eval은 당신에게 나쁜 것입니다. 위에서 언급했듯이 구형 브라우저 (IE7 이하)에는 Crockford의 JSON shim을 사용하십시오.
이 방법을 사용하려면 문자열이 유효한 javascript 이어야하며 , 이는 javascript 객체로 변환 된 다음 JSON으로 직렬화 될 수 있습니다.
편집 : 로켓이 제안한대로 수정되었습니다.