关于jquery:使用JavaScript进行JSON解析的最佳方式

Best way to JSON parsing using JavaScript

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Length of a JavaScript object (that is, associative array)

我有以下格式的JSON

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[{"student":{"name" :"ABCD",
       "age":8,
        }
   "user":{"firstName":"ABCD",
           "age": 9,
        }
        },
   {"student":{"name" :"XCYS",
       "age":10,
        }
   "user":{"firstName":"GGG",
           "age": 11,
        }
},]

我试过用(data.student[i].length),但没用(只是想看看物体的长度),我也试过(data.user[i])也没用。

我基本上对如何获取JSON中一个对象的长度以及如何有效地显示它感到非常困惑。我该怎么做?


您问题中的内容没有像所有键都需要用引号括起来那样有效地解析JSON(因此您应该使用"age": 11,而不是age: 11)。一个对象中的所有键/值对都应该用逗号分隔(所以应该使用"firstName":"GGG","age": 11而不是"firstName":"GGG""age": 11。外部数组中还有一个尾随逗号。

只要您有有效的JSON,就应该能够在所有比IE7更新的浏览器中使用JSON.parse(data)将字符串转换为实际对象。一旦解析为对象,就可以使用:

1
2
3
4
5
var data ="your JSON string";
var object = JSON.parse(data);

console.log(object.length); // the number of objects in the array
console.log(object[0].student.name; // the name of the first student

如果您支持IE7及更旧版本的浏览器,请查看Douglas Crockford的json polyfill:https://github.com/douglas crockford/json-js


假设您拥有的实际对象是有效的(没有缺少逗号等),并且您已经正确地解析了字符串,您正在尝试使用数组索引访问对象,反之亦然。让我们从头开始重建对象:

首先,您有一个数组。

1
[]

您可以使用data[0]访问数组中的第一个元素。第一个元素是一个对象。

1
2
3
[
    {}
]

对象有两个键,两个键都保存对象。

1
2
3
4
5
6
[
    {
       "student": {},
       "user": {}
    }
]

您可以使用data[0].student访问student键。它包含和具有两个键的对象。

1
2
3
4
5
6
7
8
9
[
    {
       "student": {
           "name":"ABCD",
           "age": 8
        },
       "user": {}
    }
]

您可以通过以下方式获得该对象中的值数:

1
Object.keys( data[0].student ).length;

要获得更好的浏览器支持,请参见javascript对象的长度


请在某些网站中验证您的JSON字符串http://jsonformatter.curiousconcept.com/

因为javascript是一种脚本语言,所以当它出现语法错误时,它将解释脚本并终止解释。尝试在浏览器中使用一些javascript控制台

IE - Developer Tools

Firefox - firebug plugin


我知道如何解析它,看起来很简单

我用了data[i].student.namedata[i].user.name

这似乎提醒了正确的值

感谢大家的回答!!


首先,JSON的结构不正确-一些元素名称缺少引号、逗号位置错误、缺少等。请将您的名称与以下内容进行比较:

1
2
3
 var json = [{"student":{"name" :"ABCD","age":8},"user":{"firstName":"ABCD","age": 9}},
            {"student":{"name" :"XCYS","age":10},"user":{"firstName":"GGG","age": 11}}
            ];

与垂直展开相比,JSON更容易验证读取方式。然后,通过一个简单的循环:

1
2
3
4
    for(var ix in json)
{
        alert(json[ix].student.name +"="+json[ix].student.age);
}

希望你能看到如何从那里开始。