javascript - уроки - парсинг json




Сериализация в JSON в jQuery (8)

Да, вы должны JSON.stringify и JSON.Просмотреть свою «Json_PostData» перед вызовом $ .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");

        } 
});

На этот вопрос уже есть ответ:

Мне нужно сериализовать объект в JSON. Я использую jQuery. Существует ли «стандартный» способ сделать это?

Моя конкретная ситуация: у меня есть массив, как показано ниже:

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

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

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

Если вы не хотите использовать внешние библиотеки, существует собственный метод .toSource() , но это не совсем кросс-браузер.


Нет, стандартный способ сериализации в JSON - использовать существующую библиотеку сериализации JSON. Если вы не хотите этого делать, вам придется писать свои собственные методы сериализации.

Если вы хотите дать рекомендации относительно того, как это сделать, я бы предложил изучить источник некоторых доступных библиотек.

EDIT: Я не собираюсь выходить и говорить, что писать свои собственные методы серлазии - это плохо, но вы должны учитывать, что если для вашего приложения важно использовать хорошо сформированный JSON, тогда вам нужно взвесить накладные расходы «еще один зависимость "от возможности того, что ваши пользовательские методы могут когда-нибудь столкнуться с неудачным случаем, которого вы не ожидали. Является ли этот риск приемлемым, так это ваш звонок.


Одна вещь, которую эти решения не учитывают, заключается в том, что у вас есть массив входных данных, но только одно значение было предоставлено.

Например, если задний конец ожидает массив людей, но в данном конкретном случае вы просто имеете дело с одним человеком. Затем выполните:

<input type="hidden" name="People" value="Joe" />

Затем, с предыдущими решениями, он будет просто отображать что-то вроде:

{
    "People" : "Joe"
}

Но он должен действительно

{
    "People" : [ "Joe" ]
}

Чтобы исправить это, вход должен выглядеть так:

<input type="hidden" name="People[]" value="Joe" />

И вы будете использовать следующую функцию (основанную на других решениях, но немного расширенную)

$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
    if (this.name.substr(-2) == "[]"){
        this.name = this.name.substr(0, this.name.length - 2);
        o[this.name] = [];
    }

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

Я использую jquery-json течение 6 месяцев, и он отлично работает. Он очень прост в использовании:

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

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

Я нашел это где-то. Не могу вспомнить, где, хотя ... возможно, на :)

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


JSON-js - JSON в JavaScript.

Чтобы преобразовать объект в строку, используйте JSON.stringify :

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

Чтобы преобразовать строку JSON в объект, используйте JSON.parse :

var your_object = JSON.parse(json_text);

Недавно он был рекомендован Джоном Ресигом :

... ПОЖАЛУЙСТА, начните переносить свои приложения, использующие JSON, в json2.js от Crockford. Он полностью совместим с спецификацией ECMAScript 5 и изящно деградирует, если существует нативная (быстрая!) Реализация.

Фактически, я только что приземлился на изменение jQuery вчера, который использует метод JSON.parse, если он существует, теперь, когда он был полностью определен.

Я склонен доверять тому, что он говорит по вопросам JavaScript :)

Новые браузеры поддерживают объект JSON изначально. Текущая версия библиотеки JSON от Crockford будет определять только JSON.stringify и JSON.parse если они еще не определены, оставив JSON.parse встроенную реализацию браузера неповрежденной.





serialization