문제

주어진 문자열의 JSON 데이터,어떻게 할 수 있는 안전하는 문자열로 JavaScript object?

분명히 당신이 할 수 있다 추가...

var obj = eval("(" + json + ')');

...하지만 우리가 나뭇잎에 취약 json 문자열을 포함하는 다른 코드,그것은 매우 위험한 단순히 eval.

도움이 되었습니까?

해결책

JSON.parse(jsonString) 는 순수 자바 스크립트의 접근 방식을 보장할 수 있는 합리적으로 현대적인 브라우저입니다.

다른 팁

JQuery 방법은 이제 더 이상 사용되지 않습니다.대신 이 방법을 사용:

let jsonObject = JSON.parse(jsonString);

원래 사용하여 응답되지 않는 기능 jQuery:

를 사용하는 경우 jQuery 사용:

jQuery.parseJSON( jsonString );

그것은 정확히 무엇을 찾고 있다(참조 jQuery 문서).

편집:이 대답은 즉 < 7 일에 대한 현대적인 브라우저 확인 요나단의 대답이다.

편집:이 대답은 오래된고 요나단의 대답 위 (JSON.parse(jsonString) 가)지금 최고의 응답.

JSON.org 는 JSON 파서 많은 언어를 포함하여 4 개의 다른 사람에 대한 자바 스크립트.나는 대부분의 사람들은 생각을 고려할 것입 json2.js 그들의 고의 구현입니다.

사용이 간단한 코드로 표시되는 다음 링크에 MSDN.

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

과 역방향

var str = JSON.stringify(arr);

나는 확실하지 않는 다른 방법에 대해 그것을 할 수 있지만 여기는 어떻게 당신이 그것에 시제품(JSON tutorial).

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

전화 evalJSON() 진정한 인수로 삭제합니다.

이 될 것으로 보인 문제점:

입력 받은 ajax 를 통해 websocket 등이며,그것은 항상에는 문자열 형식을-하지만 당신은 알 필요가 있다면 그것은 JSON.상자를 계산.방해를 일삼고 있는데,요즘은,는 경우에 당신은 항상 그것을 실행을 통해 JSON.구문 분석,프로그램을 계속할 수 있도'성공적으로'하지만 당신은 여전히 발생한 오류는 콘솔에서 지칠대로 지친"오류가:예기치 않은 토큰'x'".

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

를 사용하는 경우 jQuery, 할 수도 있습 do $.getJSON(url, function(data) { });

당신은 다음과 같이 할 수 있습니다 data.key1.something, data.key1.something_else, 니다,등등.

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

콜백을 전달 반환되는 데이터가 될 것입니다 JavaScript 체 또는 배열에 의해 정의된 대로 JSON 구조와 사용하여 구문 $.parseJSON() 방법입니다.

그냥 재미를위한,여기에는 이 방법을 사용하여 기능:

 jsonObject = (new Function('return ' + jsonFormatData))()

도를 사용하는 방법으로 이 데이터를 객체입니다.ex:Data='{result:true,count:1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

이 방법은 정말에 도움이 됩 및 라이브러리 작업을 할 때는 시리얼 포트는 프로그래밍

사용.을 분석 아마도 최선의 방법입니다.여기에 예 라이브 데모

var jsonRes = '{ "students" : [' +
          '{ "firstName":"Michel" , "lastName":"John" ,"age":18},' +
          '{ "firstName":"Richard" , "lastName":"Joe","age":20 },' +
          '{ "firstName":"James" , "lastName":"Henry","age":15 } ]}';
var studentObject = JSON.parse(jsonRes);

가장 쉬운 방법을 사용하여 parse() 방법:

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

다음 얻을 수 있습니다 값의 Json 소 예를 들어:

var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;

jQuery 로에서 설명 문서:

JSON.parse(jsonString);

내가 찾은"좋은"방법:

에서 커피 스크립트:

try data = JSON.parse(jqxhr.responseText)
data ||= { message: 'Server error, please retry' }

에서 자바스크립트:

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});
JSON.parse(jsonString);

json.분석으로 변경됩 개체입니다.

JSON 분석은 항상 고통에서 엉덩이입니다.는 경우에 입력하지 않으로 예상되 그것은 오류가 발생하고 충돌은 당신이 무엇을하고있습니다.다음을 사용할 수 있습니다 작은 기능 안전하게 분석합니다.그것은 항상 밝은 개체는 경우에도 입력이 유효하지 않거나 이미 개체 위해 더 나은 대부분의 경우입니다.

JSON.safeParse = function (input, def) {
  // Convert null to empty object
  if (!input) {
    return def || {};
  } else if (Object.prototype.toString.call(input) === '[object Object]') {
    return input;
  }
  try {
    return JSON.parse(input);
  } catch (e) {
    return def || {};
  }
};

변환 개체 JSON,다음 분석,그것이 나를 위해,다음과 같:

JSON.parse(JSON.stringify(object))

가 있는 경우 문자열은 다음과 같다:"{\"상태\":1,\"토큰\":\"65b4352b2dfc4957a09add0ce5714059\"}" 그런 다음 우리는 단순히 사용 JSON.분석 두번 변환하는이 문자열을 JSON 개체:

var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)

단순히 우리가 값을 추출할 수 있 JSON 에서 사용하는 개체:

    // instead of last JSON.parse:
    var { status, token } = JSON.parse(jsonString);

결과는:

status = 1 and token = 65b4352b2dfc4957a09add0ce5714059

JSON.parse()로 변환 모든 JSON 문자열로 전달 기능,JSON 개체입니다.

에 대한 더 나은 이해를 누르 F12 을 열 요소 검사의 브라우저로 이동하는 콘솔에 쓰는 다음과 같은 명령:-

var response = '{"result":true,"count":1}'; //sample json object(string form)
JSON.parse(response); //converts passed string to JSON Object.

이제 다음 명령을 실행합니다.-

console.log(JSON.parse(response));

당신을 얻을 것으로 출력체{결과:사실,개수:1}.

을 사용하기 위해서는 객체를 할당할 수 있습니다 그것은 변수로 말하자 obj:-

var obj = JSON.parse(response);

지금 사용하여 obj 및 점(.) 운영자에 액세스할 수 있는 속성의 JSON 개체입니다.

을 실행하려고 하는 명령

console.log(obj.result);

공식적으로 문서화:

JSON.parse() 방법은 분석 JSON 문자열을 구성하 JavaScript 값 또는 객체에 의해 설명의 문자열입니다.선택 reviver 기능 제공될 수 있습니다 수행에 대한 변환의 결과로 개체 반환하기 전에.

구문

JSON.parse(text[, reviver])

매개변수

텍스트

문자열을 분석하 JSON 으로.JSON 개체에 대한 설명 JSON 문입니다.

자극성(옵션)

함수의 경우,이 규정이 어떻게 원래 값에 의해 생산 분석이 변환되기 전에,반환됩니다.

반환 값

에 해당하는 객체에 주어진 JSON 텍스트입니다.

예외

가 발생 SyntaxError 예외는 경우 문자열을 분석하는 것은 유효하지 않 JSON.

사용할 수도 있습니다 reviver 기능 필터링합니다.

var data = JSON.parse(jsonString, function reviver(key, value) {
   //your code here to filter
});

자세한 내용을 읽 JSON.구문 분석

이전 질문에,나도,그러나 아무도 알 수 있는 이 솔루션을 사용하여 new Function(), 익명하는 기능 데이터를 반환합니다.


단지 예:

 var oData = 'test1:"This is my object",test2:"This is my object"';

 if( typeof oData !== 'object' )
  try {
   oData = (new Function('return {'+oData+'};'))();
  }
  catch(e) { oData=false; }

 if( typeof oData !== 'object' )
  { alert( 'Error in code' ); }
 else {
        alert( oData.test1 );
        alert( oData.test2 );
      }

이것이 조금 더 안전하기 때문에 그것이 내부에서 실행되는 기능과 컴파일하지 않는 코드에서 직접.그래서 기능이 있으면 선언은 그 안에 되지 않을 것입니다 바인딩 기본 윈도우 객체입니다.

내가 이것을 사용하여 컴파일간의 설정이 필요합니다.DOM 요소에(예를 들어 데이터 특성)간단하고 빠르다.

분석 json 문자열과 함께 JSON.parse(),과 데이터를 JavaScript 개체입니다.

JSON.parse(jsonString)

여기에,JSON 대표하는 프로세스 json 합니다.

를 들어, 우리가 상상을 받았 이 텍스트에서는 웹 서버:

'{ "name":"John", "age":30, "city":"New York"}'

분석으로 json 개체:

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}'); 

여기에 obj 은 해당 JSON 는 모습은 다음과 같습니다.

{ "name":"John", "age":30, "city":"New York"}

가 값을 사용합니다.연산자를 들어:

obj.name // John
obj.age //30

전송하는 반대로 변환 JavaScript 개체 문자열로 JSON.변환().

요약:

자바스크립트(모두 브라우저 및 라이브러리)가 내장 JSON 체입니다.이는 개체 2 편리한 방법을 다루고 JSON.그들은 다음과 같습니다:

  1. JSON.parse()JSON 으로 인수,반환 JS 체
  2. JSON.stringify() 소 JS 개체수익 JSON

다른 응용 프로그램:

또한 매우 편리하게 처리 JSON 그들은 사용할 수 있습니다.이 둘의 조합 JSON 방법할 수 있도록 우리를 매우 쉽게 깊은 클론의 배열 또는 개체입니다.예를 들어:

let arr1 = [1, 2, [3 ,4]];
let newArr = arr1.slice();

arr1[2][0] = 'changed'; 
console.log(newArr); // not a deep clone

let arr2 = [1, 2, [3 ,4]];
let newArrDeepclone = JSON.parse(JSON.stringify(arr2));

arr2[2][0] = 'changed'; 
console.log(newArrDeepclone); // A deep clone, values unchanged

는 경우에 자바스크립트에서 Mootools 의JSON.parse 는 익명으로 프레임워크에 의해.
유효한 구문 을 안전하게 도는 JSON 문자열로체 야:

var object = JSON.decode(string[, secure]);

또한 JSON Request 입을 올릴 수 있는 객체의 구문을 분석할 수 있다.
할 수 있습 cek 어떻게 차례 json 원시 데이터 여기:

http://jsfiddle.net/chetabahana/qbx9b5pm/

려고 합니다.이 중 하나에 기록된 타이프 라이터.

         export function safeJsonParse(str: string) {
               try {
                 return JSON.parse(str);
                   } catch (e) {
                 return str;
                 }
           }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top