我为我的库开发了一个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的新手,因此很难理解这个问题。
答案 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 });