如何将包含数组的json转换为javascript对象?

时间:2013-03-24 09:37:50

标签: javascript jquery json

我喜欢下面的json,

{
    "Message": "{\"Errors\":[\"The message.\",\"The message.\"],\"Infos\":[\"The message.\"],\"Warnings\":[\"The message.\"],\"Successes\":[\"The message.\"]}"
}

我想将其转换为如下所示的对象,

var obj = {
    Errors : new Array(),
    Infos : new Array(),
    Warnings : new Array(),
    Successes : new Array()
}

注意:我无法对json进行更改。

我使用 jQuery.parseJson ,但我做不到。

1 个答案:

答案 0 :(得分:3)

你发布的内容很不寻常:它是JSON定义一个具有单个属性Message的对象,它具有包含第二个嵌入式JSON字符串的字符串值。非常奇怪的结构。

如果你真的以JSON的身份接收它,那么:

var outer = jQuery.parseJSON(theStringWithTheJSON);
var obj = jQuery.parseJSON(outer.Message);

Live Example | Source

但是如果你通过ajax(例如)检索它,jQuery可能已经为你做了第一个parseJSON,在这种情况下你只需要做第二点:< / p>

jQuery.ajax({
    /* ...other parameters here...*/
    success: function(data) {
        var obj = jQuery.parseJson(data.Message);
    }
});

Live Example | Source

但是,如果可以的话,我可能会改变你收到的字符串的结构,所以它不是那样的双重编码:

{
    "Message": {
        "Errors": [
            "The message.",
            "The message."
        ],
        "Infos": [
            "The message."
        ],
        "Warnings": [
            "The message."
        ],
        "Successes": [
            "The message."
        ]
    }
}

然后你不需要对它进行双重解码,只需要第一次解码(这可能已经为你完成,你没有显示任何代码,因此很难说)是必要的,你可以使用{{ 1}}。

Live Example | Source