使用JavaScript解析JSON数组

4

我有一个 JSON 数组。

    var students = {"apResults":[{"offid":"267","item_name":"","offer_name":"fsdfsf","stlongitude":"77.5945627","stlatitude":"12.9715987"},

{"offid":"265","item_name":"","offer_name":"vess offer shops","stlongitude":"","stlatitude":""},

{"offid":"264","item_name":"","offer_name":"vess ofer  shop","stlongitude":"","stlatitude":""},
{"offid":"263","item_name":"","offer_name":"ofer frm vess","stlongitude":"77.5943760","stlatitude":"12.9716060"},
{"offid":"262","item_name":"","offer_name":"offer hungamma","stlongitude":"77.5943760","stlatitude":"12.9716060"},
{"offid":"261","item_name":"","offer_name":"offer hungamma","stlongitude":"77.5943760","stlatitude":"12.9716060"},
{"offid":"260","item_name":"","offer_name":"offer1","stlongitude":"77.5943760","stlatitude":"12.9716060"},
{"offid":"259","item_name":"","offer_name":"offer","stlongitude":"77.5943760","stlatitude":"12.9716060"}]}

我该如何使用 json.parse 解析这个 JSON 数组?我尝试了以下代码:

    for(i=0;i<students.apResults.length;i++)
{
    var contact = JSON.parse(students.apResults);
    var offid = contact.offid;
    alert(offid)    
}

但是它会出现一个错误 JSON.parse: unexpected character。我修改了我的问题。


什么错误?使用的是哪个浏览器? - danwellman
2
解析它有什么用。它已经是一个JavaScript对象。 使用 students.Maths[i].Name 访问每个学生的姓名。 - Nemoy
@danwellman - 我认为你想通过请求更多信息来快速获取赞,而事实上如果你只是读了帖子,就不需要更多的信息。尽管提供错误的更多细节也被认为是良好的实践(通常是关键性的),但我认为在这里并非如此。 - SkonJeet
在使用JSON.parse()之前,您必须使用JSON.stringify()。 您不能将js对象发送到JSON.parse(),这是您现在正在做的。请查看我的答案。 - mx0
1
@SkonJeet。我删除了你点赞的评论,不是因为我不支持我所说的话,而是因为我不需要也不想从你那里得到任何形式的声望。 - danwellman
显示剩余5条评论
7个回答

7
那不是一个json字符串,那是一个普通的JavaScript变量。
for(i=0;i<students.Maths.length;i++)
{
    var contact = students.Maths[i];
    var fullname = contact.Name;
    alert(fullname) 
}

如果我删除数学和科学,那么它是一个JSON字符串吗? - Warrior
它仍然是一个对象。这里是JSON字符串表示:alert(JSON.stringify(students)) - ZER0
1
@THOmas - 你需要更多地了解JSON,朋友。把典型的JSON想象成一个大字符串,然后可以通过JavaScript解释(解析)成一个实际的JavaScript对象。你已经拥有了这个对象,如果你想要从已有的对象中处理JSON并将其解析回对象,那么你将会退步很多。 - SkonJeet

4
for(i=0;i<students.apResults.length;i++)
{

    var contact = JSON.parse(students.apResults[i].offid);

    alert(contact)  
}

3

JSON解析字符串而不是对象/数组。

当您可以像students.Maths[i].Name一样访问时,为什么需要解析呢?


2

students 不是一个 JSON 数组,它是一个实际的数组。你不需要解析它,因为它不是一个字符串。所以你可以直接访问你需要的数据:

for(i=0;i<students.Maths.length;i++) {
    var contact = students.Maths[i];
    var fullname = contact.Name;
    alert(fullname) 
}

2

你无法解析students,因为它不是JSON格式,而是一个简单的对象。

然而,下面的代码可以正常工作:

var students = JSON.stringify(students); // if you want to send data

students = JSON.parse(students); // after receiving make a object from it

//use like any object    
for(i=0;i<students.Maths.length;i++)
{
    var contact = students.Maths[i];
    var fullname = contact.Name;
    alert(fullname) 
}

当然,除非你将学生数据发送到其他网站或程序,否则以那种方式编写它是没有意义的。
编辑:在这段代码中根本不需要JSON。但是如果你想测试JSON.parse(),可以这样做:
var students = { ... } // your data

var students = JSON.stringify(students); // students is `object`, make it `string`

students = JSON.parse(students); // now you can parse it, `students` is object again 

for(i=0;i<students.apResults.length;i++) {
    var contact = students.apResults; // no JSON
    var offid = contact.offid;
    alert(offid)    
}

那应该可以。


1
你所拥有的是一个 JavaScript 对象。因此,你不需要使用 JSON.parse。
for(i=0;i<students.Maths.length;i++)
{
    var contact = students.Maths[i]);
    var fullname = contact.Name;
    alert(fullname) 
}

这应该没问题


0
JSON 的概念是用于交换以结构化字符串表示的对象(简而言之)。你所拥有的只是一个对象。将不是 JSON 的对象解析为 JavaScript 对象是不必要的(也不可能);你所拥有的是从解析 JSON 字符串得到的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接