转换为JSON对象

时间:2014-11-20 08:50:49

标签: javascript jquery json

我正在尝试将字符串传递给JSON对象但是使用特殊字符我无法将其转换为:

字符串看起来像没有任何特殊字符

Var JsonString = "{"IdKey":"100008000","IdNumber":"50111112","IdType":"Single","IdTitle":"Singel Id","Name":"Nick"}"

我这样做

JsonString = '{"PersonDetails":[' + JsonString + ']}';
var jsonObject = jQuery.parseJSON(JsonString);

这里在JsonObject中我得到一个包含类详细对象的数组对象(下面提到)。 我正在添加一个字符串PersonDetails,因为有可能我可能会得到多个记录,所以我将它转换为数组。在该数组内部将有多个对象的详细信息类

但有时我会得到一个字符串:

Var JsonString = "{"IdKey":"100008000","IdNumber":"50111112","IdType":"Single","IdTitle":"Single id “VIP”","Name":"Nick"}"

此处 IdTitle为:“Single id”VIP“” 这也可以通过解码所有特殊字符转换为json对象,但在这种情况下,我得到一个字符串数组而不是细节对象数组。

Class details
{
    Public string IdKey;
    Public string IdNumber;
    Public string IdType;
    Public string IdTitle;
    Public string Name;
}

2 个答案:

答案 0 :(得分:0)

如果你可以转换这个

var JsonString = "{"IdKey":"100008000","IdNumber":"50111112","IdType":"Single","IdTitle":"Singel Id","Name":"Nick"}";
带双引号的

成 单引号

var JsonString = '{"IdKey":"100008000","IdNumber":"50111112","IdType":"Single","IdTitle":"Singel Id","Name":"Nick"}';

然后JSON解析将正常工作,不会出现任何解析错误。 var JsonObject = JSON.parse(JsonString);

答案 1 :(得分:-1)

以下是可以处理错误JSON的自定义函数,可以将其转换为有效/正确的JSON对象,也可以更新它以处理任何类型的错误JSON。

var JsonString = '{"IdKey":"100008000","IdNumber":"50111112","IdType":"Single","IdTitle":"Singel Id "VIP"","Name":"Nick"}'; // Incorrect JSON Object

function convertToJSON() {
    var newJsonStringObj = {};
    JsonString = JsonString.replace(/["{}]/g, '');
    var JsonStringArray = JsonString.split(",");
    var arrKey = '';
    var arrVal = '';
    var JsonStringArrayKeyValue = '';
    for(var i=0; i<JsonStringArray.length; i++) {
        arrKey = '';
        arrVal = '';
        JsonStringArrayKeyValue = '';
        JsonStringArrayKeyValue = JsonStringArray[i].split(":");
        arrKey = JsonStringArrayKeyValue[0];
        arrVal = JsonStringArrayKeyValue[1];
        newJsonStringObj[arrKey] = arrVal;
    }
    console.log(newJsonStringObj); // Correct JSON Object
}
convertToJSON();