从字符串中初始化数组

JavaScript: Init Array from string

本文关键字:数组 初始化 字符串      更新时间:2023-09-26

一个初学者的问题:我试图创建和初始化使用以下字符串作为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"} }

一般来说是可能的(怎么可能?)还是我完全搞错了?

您的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);
}

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

  1. 确保JSON代码是有效的,使用JSONLint。你的代码中有一个错误,我在下面的代码中修复了它。

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

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

  4. 正如Anthony提到的,结果不是一个数组,而是一个对象。要遍历用户列表,请参见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'"
    }
}
]