在jQuery中序列化为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']}",
...
逆天小哥蛋蛋2020/03/09 22:58:55

是的,你应该 JSON.stringifyJSON.parse你的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");

        } 
});
路易卡卡西2020/03/09 22:58:55

上述解决方案未考虑的一件事是,如果您有一组输入,但只提供了一个值。

例如,如果后端需要一组人,但是在这种情况下,您只需要与一个人打交道。然后做:

<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;
};
宝儿Harry2020/03/09 22:58:55

这基本上是两步过程:

首先,您需要像这样进行分类

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

之后,您需要将字符串转换为Object

var obj = JSON.parse(JSON_VAR);
GreenGil2020/03/09 22:58:55

如果您不想使用外部库,则可以使用.toSource()本机JavaScript方法,但是它并不是跨浏览器的完美选择。

达蒙阳光乐2020/03/09 22:58:55

我已经使用jquery-json 6个月了,它的工作原理很棒。使用非常简单:

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

// Result: {"foo":"bar","baz":"wockaflockafliz"}
Green神乐2020/03/09 22:58:55

我没有用过,但您可能想尝试Mark Gibson编写jQuery插件

它添加了两个功能:$.toJSON(value)$.parseJSON(json_str, [safe])

2020/03/09 22:58:55

我确实在某个地方找到了这个。不记得在哪里...可能在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;
};
宝儿DavaidL2020/03/09 22:58:55

JSON-js -JavaScript中的JSON。

要将对象转换为字符串,请使用JSON.stringify

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

要将JSON字符串转换为对象,请使用JSON.parse

var your_object = JSON.parse(json_text);

John Resig最近推荐了它

...请开始将使用JSON的应用程序迁移到Crockford的json2.js。它与ECMAScript 5规范完全兼容,并且在存在本机(更快!)实现的情况下优雅地降级。

实际上,昨天我刚刚在jQuery中进行了一次更改,该更改利用了JSON.parse方法(如果已存在),因为它已经被完全指定。

我倾向于相信他在JavaScript问题上所说的话:)

所有现代浏览器(以及许多较旧的较旧的浏览器)都原生支持JSON对象Crockford的JSON库的当前版本仅会定义JSON.stringifyJSON.parse如果尚未定义,则任何浏览器本机实现都将保持不变。

Davaid阳光小卤蛋2020/03/09 22:58:55

不,序列化为JSON的标准方法是使用现有的JSON序列化库。如果您不希望这样做,则必须编写自己的序列化方法。

如果您需要有关如何执行此操作的指南,建议您检查一些可用库的源代码。

编辑:我不会出来说编写自己的序列化方法是不好的,但是您必须考虑到,如果使用格式正确的JSON对您的应用程序很重要,那么您就必须权衡“另外一个”的开销。依赖性”,以防止您的自定义方法有一天可能遇到您未曾预料到的失败案例。您可以致电该风险是否可以接受。

小宇宙西里2020/03/09 22:58:55

适用于IE8 +

不需要jQuery,请使用:

JSON.stringify(countries);