print - serialize javascript




Serialización a JSON en jQuery (8)

Encontré esto en alguna parte. No recuerdo dónde, aunque ... probablemente en StackOverflow :)

$.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;
};

Esta pregunta ya tiene una respuesta aquí:

Necesito serializar un objeto a JSON. Estoy usando jQuery. ¿Hay una manera "estándar" de hacer esto?

Mi situación específica: tengo una matriz definida como se muestra a continuación:

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

y necesito convertir esto en una cadena para pasar a $.ajax() como esto:

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

Es básicamente un proceso de 2 pasos:

En primer lugar, necesitas unirte así.

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

Después de eso, necesitas convertir la cadena a Objeto

var obj = JSON.parse(JSON_VAR);

La mejor manera es incluir el polyfill para el objeto JSON-js .

Pero si insiste en crear un método para serializar un objeto a notación JSON ( valores válidos para JSON ) dentro del espacio de nombres jQuery, puede hacer algo como esto:

Implementación

// 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));

Uso

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);


Sí, debes JSON.stringify y JSON.parse tu "Json_PostData" antes de llamar a $ .ajax

$.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");

        } 
});

Si no desea utilizar bibliotecas externas, existe el método de JavaScript nativo .toSource() , pero no es perfectamente .toSource() con todos los navegadores.



JSON-js - JSON en JavaScript.

Para convertir un objeto en una cadena, use JSON.stringify :

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

Para convertir una cadena JSON en objeto, use JSON.parse :

var your_object = JSON.parse(json_text);

Recientemente fue recomendado por John Resig :

... POR FAVOR, comience a migrar sus aplicaciones que usan JSON a json2.js de Crockford. Es totalmente compatible con la especificación ECMAScript 5 y se degrada con gracia si existe una implementación nativa (¡más rápida!).

De hecho, ayer encontré un cambio en jQuery que utiliza el método JSON.parse, si existe, ahora que se ha especificado por completo.

Tiendo a confiar en lo que dice sobre asuntos de JavaScript :)

Los navegadores más nuevos admiten el objeto JSON de forma nativa. La versión actual de la biblioteca JSON de Crockford solo definirá JSON.stringify y JSON.parse si aún no están definidas, dejando intacta cualquier implementación nativa del navegador.





serialization