개체 문자열을 JSON으로 변환
JavaScript(또는 jQuery)를 사용하여 객체를 설명하는 문자열을 JSON 문자열로 변환하려면 어떻게 해야 합니까?
예: 변환(유효한 JSON 문자열이 아님):
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"
다음과 같이 입력합니다.
str = '{ "hello": "world", "places": ["Africa", "America", "Asia", "Australia"] }'
저는 이 제품을 사용하는 것을 피하고 싶습니다.eval()가능하면.
문자열이 신뢰할 수 있는 원본에서 온 경우evalJSON.stringify다음과 같이 합니다.
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
var json = JSON.stringify(eval("(" + str + ")"));
를 사용할 는, 다음의 해 주세요.eval오브젝트 리터럴은 괄호로 둘러싸야 합니다.그렇지 않으면 중괄호는 오브젝트가 아닌 블록으로 해석됩니다.
오브젝트를 유효한 JSON으로 인코딩하고 해석, 부호화 및 해석할 필요가 없어지는 것이 훨씬 낫다는 질문의 코멘트에도 동의합니다.HTML은 단일 따옴표로 묶인 속성을 지원합니다(문자열 내의 모든 단일 따옴표를 HTML 인코딩하십시오).
JSON이 JSON이 유효하지 않습니다.JSON.parse jQuery ('jQuery')$.parseJSON하지 않습니다을 사용하다
한 가지 방법은 다음과 같습니다.evalJSON을 「 「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값 합니다. 먼저 키와 값은 큰따옴표로 묶어야 합니다.다음과 같이 표시됩니다(HTML에서 따옴표로 묶인 단일 속성이 유효합니다).
<div data-object='{"hello":"world"}'></div>
그럼 이제 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 이렇게JSON.parse jQuery ('jQuery')$.parseJSON를 참조해 주세요.
var str = '{"hello":"world"}';
var obj = JSON.parse(str);
str = jQuery.parseJSON(str)
편집. 유효한 JSON 문자열이 있습니다.
다음 링크에서 간단한 코드를 사용합니다.
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+'"'})
}
결과
let 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 + ')'));
.
그렇게 하지 마세요.평가는 당신에게 좋지 않아요.크로크포드 JSON shim.
이 메서드에서는 유효한 javascript 문자열이 필요합니다.javascript 객체로 변환되어 JSON으로 시리얼화 됩니다.
edit: Rocket 제안대로 수정.
나는 이 오래된 실에 관심이 있는 사람을 위해 대답을 했다.
jQuery 플러그인 및 데모용 HTML5 data-* 파서를 만들었습니다.이것에 의해, 부정한 형식의 JSON 스트링이 JavaScript 오브젝트로 변환됩니다.eval().
아래 HTML5 data-* 속성을 전달할 수 있습니다.
<div data-object='{"hello":"world"}'></div>
<div data-object="{hello:'world'}"></div>
<div data-object="hello:world"></div>
오브젝트에 추가:
{
hello: "world"
}
결과를 얻으려면 "eval"을 사용한 후 JSON.stringify를 사용한 후 JSON.parse를 사용해야 합니다.
var errorString= "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
var jsonValidString = JSON.stringify(eval("(" + errorString+ ")"));
var JSONObj=JSON.parse(jsonValidString);
더글라스 크록포드는 컨버터를 가지고 있지만, 나쁜 JSON을 좋은 JSON으로 바꾸는 데 도움이 될지는 잘 모르겠습니다.
https://github.com/douglascrockford/JSON-js
이 위업을 달성하는 훨씬 간단한 방법이 있습니다.더미 요소의 클릭 속성을 하이잭하여 문자열을 JavaScript 개체로 강제로 되돌립니다.
var jsonify = (function(div){
return function(json){
div.setAttribute('onclick', 'this.__json__ = ' + json);
div.click();
return div.__json__;
}
})(document.createElement('div'));
// Let's say you had a string like '{ one: 1 }' (malformed, a key without quotes)
// jsonify('{ one: 1 }') will output a good ol' JS object ;)
다음은 데모입니다.http://codepen.io/csuwldcat/pen/dfzsu (콘솔 열기)
새로운 함수()를 사용하는 것은 평가보다 낫지만 그래도 안전한 입력에서만 사용해야 합니다.
const parseJSON = obj => Function('"use strict";return (' + obj + ')')();
console.log(parseJSON("{a:(4-1), b:function(){}, c:new Date()}"))
// outputs: Object { a: 3, b: b(), c: Date 2019-06-05T09:55:11.777Z }
대괄호를 써야 합니다. 대괄호가 없으면eval는, 대괄호내의 코드를 명령어 블록으로서 간주합니다.
var i = eval("({ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] })");
가장 안전한 방법은 JSON5 – JSON for Humans입니다.이는 해당 사용 사례에 맞게 특별히 작성되었습니다.
const result = JSON5.parse("{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }");
console.log(JSON.stringify(result));
<script src="https://cdnjs.cloudflare.com/ajax/libs/json5/0.5.1/json5.min.js"></script>
위의 간단한 예에서는 2개의 단순한 regex 치환을 사용하여 이를 수행할 수 있습니다.
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
str.replace(/(\w+):/g, '"$1":').replace(/'/g, '"');
=> '{ "hello": "world", "places": ["Africa", "America", "Asia", "Australia"] }'
큰 경고:이 순진한 접근법에서는 오브젝트에 다음 명령어를 포함하는 문자열이 없다고 가정합니다.'또는:성격.예를 들어 다음 오브젝트 문자열을 JSON으로 변환하려면eval:
"{ hello: 'world', places: [\"America: The Progressive's Nightmare\"] }"
그 장난을 치기 위해서, 당신은 당신의 스트링을babel-standalone
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
function toJSON() {
return {
visitor: {
Identifier(path) {
path.node.name = '"' + path.node.name + '"'
},
StringLiteral(path) {
delete path.node.extra
}
}
}
}
Babel.registerPlugin('toJSON', toJSON);
var parsed = Babel.transform('(' + str + ')', {
plugins: ['toJSON']
});
var json = parsed.code.slice(1, -2)
console.log(JSON.parse(json))
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
var str = "{ hello: 'world', 장소: ['Africa', 'Asia', 'Australia'] }" var fStr = str .replace(/([A-z]*)(:)/g, "$1" .replace(/')"
console.log(JSON.parse(fStr))
죄송해요, 지금 핸드폰이에요, 여기 사진 있어요.
eval을 사용하지 않고 regex를 1개 사용하는 솔루션:
str.replace(/([\s\S]*?)(')(.+?)(')([\s\S]*?)/g, "$1\"$3\"$5")
이 방법은 여러 줄 및 단일 따옴표 'string'이 이중 따옴표 'string'으로 대체될 수 있는 모든 발생(/g 플래그)에 대해 작동해야 합니다.
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
var json = JSON.stringify(eval("(" + str + ")"));
아마 당신은 이것을 시도해봐야 할 것이다.
str = jQuery.parseJSON(str)
언급URL : https://stackoverflow.com/questions/9036429/convert-object-string-to-json
'programing' 카테고리의 다른 글
| json 필드 유형 postgresql에서 null 값을 쿼리하는 방법 (0) | 2023.03.10 |
|---|---|
| 약속 체인을 끊고 체인이 끊어진 단계에 따라 함수를 호출합니다(거부). (0) | 2023.03.10 |
| 만약...엘세...을 사용할 수 있습니까?리액트 렌더 함수에 있는 문? (0) | 2023.03.10 |
| Wordpress에서 session_start를 사용하는 방법 (0) | 2023.03.10 |
| Oracle에서 PL/SQL 출력을 플러시하는 방법이 있습니까? (0) | 2023.03.10 |
