如何正确解析JSON?

时间:2017-05-16 06:14:13

标签: javascript json cordova

我为我的库开发了一个Cordova android插件。该库用于跨不同的连接设备发送事件。

JS接口从java端接收JSON。我想要做的是在到达应用程序之前解析它,以便开发人员可以直接将它用作JS对象。当我试图在我的插件的JS界面中解析JSON时,我遇到了问题。以下是一个例子:

JS界面收到:

{"key":"name","data":"{\"name\":\"neil\",\"age\":2,\"address\":\"2 Hill St\"}"}

在JS界面中解析之后:

Object {key: "name", data: "{"name":"neil","age":2,"address":"2 Hill St"}"}
data:"{"name":"neil","age":2,"address":"2 Hill St"}"
key:"name"
__proto__:Object

如您所见,如果此数据到达应用程序并且开发人员访问数据:

eventData.key = name;
eventData.data = {"name":"neil","age":2,"address":"2 Hill St"};
eventData.data.name = undefined

如何在JS界面中解析内部数据,以便开发人员可以直接访问。在上面的例子中,他必须解析eventData.data来访问属性。我不希望这种情况发生,我想在JS界面本身这样做。

请注意,eventData可以有许多属性,因此在传入应用程序之前应该正确解析它们。

我是Javascript的新手,因此很难理解这个问题。

2 个答案:

答案 0 :(得分:1)

似乎您返回的JSON包含数据属性的字符串。



    var response = {"key":"name","data":"{\"name\":\"neil\",\"age\":2,\"address\":\"2 Hill St\"}"};
    //Parse the data 
    var jsonData = JSON.parse(response.data);
    
    console.log(jsonData.name); //neil
    console.log(jsonData.age); //2
    console.log(jsonData.address);//"2 Hill St"




答案 1 :(得分:0)

正如其他人指出的那样,你必须做JSON.parse(eventData.data),因为数据是一个字符串。 你必须看看为什么会这样。内部数据可能以这种方式存储,在某些情况下,它有效将它作为平面对象存储在db中,或者它被错误地字符串化两次:

var innerdata = JSON.stringify({ name: "neil" });
var eventData = JSON.stringify({ key: "name", data: innerdata });

将与您收到的字符串相对应。

首先进行字符串化的正确方法是:

var innerdata = { name: "neil" };
var eventData = JSON.stringify({ key: "name", data: innerdata });