Pregunta Serializando a JSON en jQuery [duplicado]


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 cuerda para pasar a $.ajax() Me gusta esto:

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

1140
2017-10-10 15:29


origen


Respuestas:


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, comienza a migrar   sus aplicaciones que usan JSON a   Crockford's json2.js. Es completamente   compatible con el ECMAScript 5   especificación y se degrada con gracia   si es una implementación nativa (¡más rápida!)   existe

De hecho, acabo de aterrizar un cambio en jQuery ayer que utiliza el   Método JSON.parse si existe, ahora   que ha sido completamente especificado.

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

Navegadores más nuevos apoyen el Objeto JSON nativamente. La versión actual de la biblioteca JSON de Crockford solo definirá JSON.stringify y JSON.parse si aún no están definidos, dejando intacta cualquier implementación nativa del navegador.


1091
2018-05-26 19:22



He estado usando jquery-json durante 6 meses y funciona genial. Es muy simple de usar:

var myObj = {foo: "bar", "baz": "wockaflockafliz"};
$.toJSON(myObj);

// Result: {"foo":"bar","baz":"wockaflockafliz"}

181
2018-06-01 21:40



Funciona en IE8 +

No necesita jQuery, use:

JSON.stringify(countries); 

92
2017-08-29 06:57



No lo he usado, pero es posible que desee probar el Plugin jQuery escrito por Mark Gibson 

Agrega las dos funciones: $.toJSON(value), $.parseJSON(json_str, [safe]).


43
2017-10-10 15:35



No, la forma estándar de serializar a JSON es usar una biblioteca de serialización JSON existente. Si no desea hacer esto, tendrá que escribir sus propios métodos de serialización.

Si desea orientación sobre cómo hacerlo, le sugiero que examine la fuente de algunas de las bibliotecas disponibles.

EDITAR: No voy a salir y decir que escribir sus propios métodos de publicación es malo, pero debe considerar que si es importante para su aplicación usar JSON bien formado, entonces debe sopesar la sobrecarga de "una dependencia más". contra la posibilidad de que algún día sus métodos personalizados encuentren un caso de falla que no había anticipado. Si ese riesgo es aceptable es su llamado.


34
2017-10-10 15:47



Encontré esto en alguna parte. No puedo recordar dónde ... 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;
};

26
2018-01-02 07:57



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


10
2017-12-01 21:44



La mejor manera es incluir el polietileno para JSON objeto.

Pero si insiste en crear un método para serializar un objeto a la notación JSON (valores válidos para JSON) dentro del espacio de nombres de jQuery, puedes 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);

9
2018-04-11 05:50



Sí, debe JSON.stringify y JSON.parse su "Json_PostData" antes de llamar $ .ajax

$ .ajax ({
            url: post_http_site,
            tipo: "POST",
            datos: JSON.parse (JSON.stringify (Json_PostData)),
            caché: falso,
            error: function (xhr, ajaxOptions, throwwnError) {
                alerta ("escribir elemento json, error Ajax!" + xhr.status + "error =" + throwwnError + "xhr.responseText =" + xhr.responseText);
            },
            éxito: función (datos) {
                alerta ("escribir elemento json, Ajax OK");

            }
    });

7
2018-03-24 03:50