programing

개체 문자열을 JSON으로 변환

javajsp 2023. 3. 10. 21:05

개체 문자열을 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);

jQuery.parseJ아들.

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 }

출처 : MDN, 2 ality

대괄호를 써야 합니다. 대괄호가 없으면eval는, 대괄호내의 코드를 명령어 블록으로서 간주합니다.

var i = eval("({ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] })");

가장 안전한 방법은 JSON5JSON 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