jquery json을 문자열로?


79

json 문자열에서 $ .parseJSON을 사용하는 대신 객체를 가져 와서 json을 나타내는 문자열로 변수에 저장해야합니다.

(내가 다루고있는 라이브러리는 형식이 잘못된 json 유형을 예상하므로 제대로 작동하려면이를 처리해야합니다.)

이를 수행하는 가장 좋은 방법은 무엇입니까?



잘못된 JSON 문자열을 예상하는 라이브러리는 무엇입니까? : /
Marcel Korpel

Stanford JavaScript Cryptography Library는 잘못된 형식의 JSON을 출력하고 구문 분석합니다. 버그는 현재 작업 중입니다.
Incognito

답변:


84

편집 : 아래 코드를 구현하는 대신 Douglas Crockford의 json2.js 라이브러리를 사용해야합니다. 몇 가지 추가 기능과 더 나은 / 이전 브라우저 지원을 제공합니다.

https://github.com/douglascrockford/JSON-js 에서 json2.js 파일을 가져옵니다.


// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
    var t = typeof (obj);
    if (t != "object" || obj === null) {
        // simple data type
        if (t == "string") obj = '"'+obj+'"';
        return String(obj);
    }
    else {
        // recurse array or object
        var n, v, json = [], arr = (obj && obj.constructor == Array);
        for (n in obj) {
            v = obj[n]; t = typeof(v);
            if (t == "string") v = '"'+v+'"';
            else if (t == "object" && v !== null) v = JSON.stringify(v);
            json.push((arr ? "" : '"' + n + '":') + String(v));
        }
        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    }
};

var tmp = {one: 1, two: "2"};
JSON.stringify(tmp); // '{"one":1,"two":"2"}'

코드 출처 : http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/


23
이 함수 대신 json2.js 라이브러리를 권장합니다. undefined, 함수 (유효한 JSON 값이 아님), 부울 객체 (예 :) new Boolean(true);또는 NaN대체해야하는 속성과 같은 일부 유형을 올바르게 처리하지 않기 때문입니다. 로 null등 ... 또한이 추가 선택적 인수는 지원하지 않는 replacer기능과 spaces하는 들여 쓰기 수, 완전히 설명 표준에 있습니다.
Christian C. Salvadó

3
나는 아마도 생각 json2 링크는해야한다 : github.com/douglascrockford/JSON-js/blob/master/json2.js
fisherwebdev

5
요즘 대부분의 브라우저에는 구문 분석 및 문자열 화 메서드를 포함하는 네이티브 JSON 개체가 있습니다. 따라서 위의 코드를 포함 할 필요없이 JSON.stringify({})얻을 수 있는지 확인하십시오 "{}". 매개 변수를 전달하여 키를 필터링하거나 예쁜 인쇄를 수행 할 수도 있습니다. 예를 들어 JSON.stringify({a:1,b:2}, null, 2)각 키 앞에 개행 문자와 2 개의 공백을 넣습니다.
AlexChaffee

현대적인 답변을 찾는 사람들을 위해 : JSON.stringify (); : 모두 브라우저 (데스크탑 및 모바일) 구현 developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
파블로 마르티네스

38

나는 사용한다

$.param(jsonObj)

나에게 문자열을 가져다줍니다.


8
그러나 이것은 JSON을 생성하지 않습니다 (그리고 그것이 질문이었습니다).
Felix Kling

22
하지만이 작은 코드는 질문 요청의 모든 제목을하고있다 : P
NILS를 petersohn

35

요즘 대부분의 브라우저 JSON에는 parsestringify메서드 를 포함 하는 네이티브 개체가 있습니다. 그래서 JSON.stringify({})당신이 얻는 지 시도 하고보십시오 "{}". 매개 변수를 전달하여 키를 필터링하거나 예쁜 인쇄를 수행 할 수도 있습니다. 예를 들어 JSON.stringify({a:1,b:2}, null, 2)각 키 앞에 개행 문자와 2 개의 공백을 넣습니다.

JSON.stringify({a:1,b:2}, null, 2)

준다

"{\n  \"a\": 1,\n  \"b\": 2\n}"

다음과 같이 인쇄되는

{
  "a": 1,
  "b": 2
}

질문의 일부를 엉망으로 만들려면 두 번째 매개 변수를 사용하십시오. 에서 http://www.javascriptkit.com/jsref/json.shtml :

replacer 매개 변수는 함수 또는 문자열 / 숫자의 배열 일 수 있습니다. JSON 개체 내의 각 멤버를 단계별로 진행하여 각 멤버를 변경해야하는 값을 결정할 수 있습니다. 함수로 다음을 반환 할 수 있습니다.

  • 속성의 원래 값을 반환 된 값으로 대체하는 숫자, 문자열 또는 부울입니다.
  • 직렬화 된 다음 반환되는 객체입니다. 개체 메서드 또는 함수는 허용되지 않으며 대신 제거됩니다.
  • Null : 속성이 제거됩니다.

배열로서 내부에 정의 된 값은 JSON 개체로 변환 될 때 유지되어야하는 JSON 개체 내부의 속성 이름에 해당합니다.


10

내가 찾은 가장 좋은 방법은 jQuery JSON 을 사용하는 것입니다.


1
그것은 JQuery와 있기 때문에 플러그인 및 직접적으로 JQuery와에 의해 제공 무엇을
라자 굽타

@ User01과하지만, JQuery와이 작업을 수행 할 수있는 방법을 포함하지 않는다 (나는이 대답을 쓸 때 적어도 그것을하지 않았다 확인 지금 않는 경우)
데이비드 레이놀즈

@DavidReynolds : 예, 물론 이해합니다 :) 나는 당신에게 어떤 공격도 의도하지 않았지만 문제에 대한 해결책으로 이것에 대해 언급했습니다 :)
Rajat Gupta

0

JSON을 객체로 구문 분석 한 다음 ajavscript 객체에서 잘못된 JSON을 생성 할 수 있습니다. 이것은 성능면에서 최선이 아닐 수도 있습니다.

그렇지 않으면 문자열을 아주 조금만 변경해야하는 경우 문자열로 취급하고 표준 자바 스크립트를 사용하여 변경하면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.