0

一个初学者的问题:我正在尝试使用以下字符串作为 JavaScript 中的初始数据来创建和初始化一个用户数组:

{ "user": {"notes": [{ "text": "Hello ", "date": "12\/1\/2013 5:01:36 AM", }], "name": "Alex"} }, { "user": { "notes": [{ "text": "Hi ", "date": "12\/1\/2013 5:15:19 PM"}, { "text": "It is me",  "date": "12\/1\/2013 6:23:54 PM"}], "name": "Anna"} }

一般有可能(如何?)还是我完全弄错了?

4

3 回答 3

0
  1. 确保 JSON 代码有效,为此使用JSONLint。您的代码中有错误,我在下面的代码中修复了它。

  2. 使用JSON.parse()将其传输到对象。

  3. 要与所有浏览器兼容,请确保您也包含json2(并非所有浏览器都有 JSON 对象来调用 JSON.parse 函数)。

  4. 正如安东尼所提到的,结果不是一个数组而是一个对象。要遍历用户列表,请参阅jsfiddle或下面的示例。

例子

var str = "[{user:...";
var userList = JSON.parse(str);

for(var i in userList){
    var user = userList[i].user;
    document.write(user.name + "<br/>");
}

更正的 JSON

[
{
    \"user\": {
        \"notes\": [
            {
                \"text\": \"Hello \",
                \"date\": \"12/1/2013 5:01:36 AM\"
            }
        ],
        \"name\": \"Alex\"
    }
},
{
    \"user\": {
        \"notes\": [
            {
                \"text\": \"Hi \",
                \"date\": \"12/1/2013 5:15:19 PM\"
            },
            {
                \"text\": \"It is me\",
                \"date\": \"12/1/2013 6:23:54 PM\"
            }
        ],
        \"name\": \"Anna\"
    }
}
]
于 2013-01-14T11:13:22.810 回答
0

您的 JSON 无效。它包含一个语法错误(可能是问题中的拼写错误) - 在第一个用户之后的无效逗号date,它也是一个未包含在数组语法中的对象列表[]

更正的json和解析示例为:

演示

var json = '[{ "user": {"notes": [{ "text": "Hello ", "date": "12\/1\/2013 5:01:36 AM" }], "name": "Alex"} }, { "user": { "notes": [{ "text": "Hi ", "date": "12\/1\/2013 5:15:19 PM"}, { "text": "It is me",  "date": "12\/1\/2013 6:23:54 PM"}], "name": "Anna"} }]';
//          ^ the list of objects need to be enclosed with []
var users = JSON.parse(json);

for(var i=0; i<users.length; i++)
{
  console.log(users[i].user.name);
}
于 2013-01-14T11:17:16.500 回答
0

一般来说,您使用 ajax 调用获得了该字符串,对吗? 您可以在所有现代浏览器中
使用 JSON.parse(strToBeConverted) 将该字符串转换为 javascript 对象。 如果没有这样的内置 JSON 对象怎么办?按照下面说的做, 1.导入从Douglas Crockford创建的这个站点下载的JS, 2.使用JSON.parse来做你的业务。



于 2013-01-14T11:17:38.513 回答