JQuery JSON в строку? - PullRequest
       4

JQuery JSON в строку?

79 голосов
/ 29 августа 2010

Вместо того, чтобы переходить от строки json и использовать $ .parseJSON, мне нужно взять мой объект и сохранить его в переменной как строку, представляющую json.

(Библиотека, с которой я имею дело, ожидает искаженный тип json, поэтому мне нужно возиться с ней, чтобы она заработала.)

Какой лучший способ сделать это?

Ответы [ 5 ]

84 голосов
/ 29 августа 2010

Редактировать: Вы должны использовать библиотеку json2.js от Дугласа Крокфорда вместо того, чтобы реализовывать код ниже.Он предоставляет некоторые дополнительные функции и лучшую / более старую поддержку браузера.

Получить файл json2.js из: https://github.com/douglascrockford/JSON-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/

38 голосов
/ 23 февраля 2011

Я использую

$.param(jsonObj)

который получает мне строку.

35 голосов
/ 03 апреля 2012

В настоящее время большинство браузеров имеют собственный объект JSON, который включает методы parse и stringify. Так что просто попробуйте JSON.stringify({}) и посмотрите, получите ли вы "{}". Вы можете даже передать параметры, чтобы отфильтровать ключи или сделать красивую печать, например JSON.stringify({a:1,b:2}, null, 2) ставит новую строку и 2 пробела перед каждой клавишей.

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

1010 * дает *

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

который печатается как

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

Что касается возни с частью вашего вопроса, используйте второй параметр. От http://www.javascriptkit.com/jsref/json.shtml:

Параметр replacer может быть функцией или массивом Строка / Число. Он проходит через каждый член в объекте JSON, чтобы позвольте вам решить, на какое значение следует изменить каждый элемент. Как функция, которую он может вернуть:

  • Число, строка или логическое значение, которое заменяет исходное значение свойства на возвращенное.
  • Объект, который сериализуется, а затем возвращается. Объектные методы или функции не допускаются и вместо этого удаляются.
  • Нуль, что приводит к удалению свойства.

Как массив, значения, определенные внутри него, соответствуют именам свойства внутри объекта JSON, которые должны быть сохранены при преобразован в объект JSON.

10 голосов
/ 25 августа 2011

Лучший способ, который я нашел, это использовать jQuery JSON

0 голосов
/ 29 августа 2010

Вы можете проанализировать JSON для объекта, а затем создать свой искаженный JSON из объекта ajavscript. Это, возможно, не самая лучшая производительность, хотя.

В противном случае, если вам нужно внести очень небольшие изменения в строку, просто обработайте ее как строку и исказите ее, используя стандартный javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...