javascript - serialize - getjson data




jQuery에서 JSON에 직렬화하기 (8)

가장 좋은 방법은 JSON-js 객체 용 polyfill을 포함하는 것입니다.

그러나 jQuery 네임 스페이스에서 객체를 JSON 표기법 (JSON의 유효한 값 )으로 직렬화하는 방법을 만들려는 경우 다음과 같이 할 수 있습니다.

이행

// This is a reference to JSON.stringify and provides a polyfill for old browsers.
// stringify serializes an object, array or primitive value and return it as JSON.
jQuery.stringify = (function ($) {
  var _PRIMITIVE, _OPEN, _CLOSE;
  if (window.JSON && typeof JSON.stringify === "function")
    return JSON.stringify;

  _PRIMITIVE = /string|number|boolean|null/;

  _OPEN = {
    object: "{",
    array: "["
  };

  _CLOSE = {
    object: "}",
    array: "]"
  };

  //actions to execute in each iteration
  function action(key, value) {
    var type = $.type(value),
      prop = "";

    //key is not an array index
    if (typeof key !== "number") {
      prop = '"' + key + '":';
    }
    if (type === "string") {
      prop += '"' + value + '"';
    } else if (_PRIMITIVE.test(type)) {
      prop += value;
    } else if (type === "array" || type === "object") {
      prop += toJson(value, type);
    } else return;
    this.push(prop);
  }

  //iterates over an object or array
  function each(obj, callback, thisArg) {
    for (var key in obj) {
      if (obj instanceof Array) key = +key;
      callback.call(thisArg, key, obj[key]);
    }
  }

  //generates the json
  function toJson(obj, type) {
    var items = [];
    each(obj, action, items);
    return _OPEN[type] + items.join(",") + _CLOSE[type];
  }

  //exported function that generates the json
  return function stringify(obj) {
    if (!arguments.length) return "";
    var type = $.type(obj);
    if (_PRIMITIVE.test(type))
      return (obj === null ? type : obj.toString());
    //obj is array or object
    return toJson(obj, type);
  }
}(jQuery));

용법

var myObject = {
    "0": null,
    "total-items": 10,
    "undefined-prop": void(0),
    sorted: true,
    images: ["bg-menu.png", "bg-body.jpg", [1, 2]],
    position: { //nested object literal
        "x": 40,
        "y": 300,
        offset: [{ top: 23 }]
    },
    onChange: function() { return !0 },
    pattern: /^bg-.+\.(?:png|jpe?g)$/i
};

var json = jQuery.stringify(myObject);
console.log(json);

이 질문에는 이미 답변이 있습니다.

개체를 JSON에 직렬화해야합니다. 나는 jQuery를 사용하고있다. 이것을 할 수있는 "표준"방법이 있습니까?

내 특정 상황 : 나는 아래와 같이 정의 된 배열이 있습니다.

var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';
...

이 문자열을 $.ajax() 에 전달하려면 다음과 같이 설정해야합니다.

$.ajax({
    type: "POST",
    url: "Concessions.aspx/GetConcessions",
    data: "{'countries':['ga','cd']}",
...

기본적으로 2 단계 프로세스입니다.

먼저, 다음과 같이 문자열을 사용해야합니다.

var JSON_VAR = JSON.stringify(OBJECT_NAME, null, 2); 

그 후 문자열을 Object로 변환해야합니다.

var obj = JSON.parse(JSON_VAR);


나는 이것을 어딘가에서 발견했다. 비록 에 아마도 ... 기억이 안나요 :)

$.fn.serializeObject = function(){
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

예, $ .ajax를 호출하기 전에 JSON.stringify 및 JSON.parse "Json_PostData"를 수행해야합니다.

$.ajax({
        url:    post_http_site,  
        type: "POST",         
        data:   JSON.parse(JSON.stringify(Json_PostData)),       
        cache: false,
        error: function (xhr, ajaxOptions, thrownError) {
            alert(" write json item, Ajax error! " + xhr.status + " error =" + thrownError + " xhr.responseText = " + xhr.responseText );    
        },
        success: function (data) {
            alert("write json item, Ajax  OK");

        } 
});

외부 라이브러리를 사용하지 않으려면 .toSource() 네이티브 자바 스크립트 메소드가 있지만 완벽하게 크로스 브라우저는 아닙니다.



JSON-js - JavaScript의 JSON

객체를 문자열로 변환하려면 JSON.stringify 사용하십시오.

var json_text = JSON.stringify(your_object, null, 2);

JSON 문자열을 object로 변환하려면 JSON.parse 사용하십시오.

var your_object = JSON.parse(json_text);

최근에 John Resig의 추천을 받았습니다.

... JSON을 사용하는 응용 프로그램을 Crockford의 json2.js로 마이그레이션하시기 바랍니다. ECMAScript 5 사양과 완전히 호환되며 네이티브 (더 빠른!) 구현이 존재할 경우 정상적으로 성능이 저하됩니다.

사실 JSON.parse 메소드가 존재하는 경우 JSON.parse 메소드를 사용하는 jQuery에 어제 변경되었으므로 완전히 지정되었습니다.

나는 그가 JavaScript 문제에 대해 말하는 것을 신뢰하는 경향이있다 :)

새로운 브라우저 는 기본적으로 JSON 객체를 지원합니다. 현재 버전의 Crockford의 JSON 라이브러리는 JSON.stringifyJSON.parse 가 정의되어 있지 않은 경우에만 정의하고 브라우저의 기본 구현은 그대로 유지합니다.







serialization