【问题标题】:Json Traverse Problem, not able to traverse valuesJson Traverse 问题,无法遍历值
【发布时间】:2010-06-03 06:58:47
【问题描述】:

我从 ajax 调用得到以下返回,但无法遍历它,请帮忙。

{ “1”:{ “tel1”:空, “状态”:“1”, “传真”:“”, “tel2”:空, “名称”:“sh_sup1”, “国家”:“安圭拉”, "creation_time": "2010-06-02 14:09:40", “created_by”:“0”, “身份证”:“85”, "fk_location_id": "3893", “地址”:“诺伊达”, “电子邮件”:“sh_sup1@shell.com”, "website_url": "http://www.noida.in", “srk_main_id”:“0” }, “0”:{ "tel1": "艾哈姆达巴德", “状态”:“1”, “传真”:“”, "tel2": "古吉拉特", “名称”:“巴拉特石油”, “国家”:“印度”, "creation_time": "2010-05-31 15:36:53", “created_by”:“0”, “身份证”:“82”, "fk_location_id": "3874", "address": "这是测试地址", “电子邮件”:“bp@india.com”, "website_url": "http://www.bp.com", “srk_main_id”:“0” }, “计数”:2 }

【问题讨论】:

  • 我重新格式化了它。您还需要告诉我们您正在使用什么语言,您想要什么样的遍历,以及您尝试过什么。此外,这是奇怪的 JSON。所有的数字都是字符串,它使用带有“0”和“1”键的对象,而不是更自然的数组。
  • 我正在使用 php,我使用 json_encode 从服务器对 php 数组进行编码并将其返回给客户端,现在我想遍历我仅使用 javascript 获得的这个 json 数据。Count 可以删除它只是添加以计算形成的元素数量。请建议
  • @Jos: 嗯...你用json_encode 对其进行编码...那么为什么不使用json_decode 将其解码回来...?然后像通常使用 PHP 关联数组一样访问您想要的任何变量..
  • @Mark,我想是因为他正试图用 JavaScript 阅读它。 @Jos,显示您的编码代码。我认为问题的一部分是计数。如果它是一个真正的 JSON 数组,则不需要这样做,它将强制 PHP 导出为 JSON 对象。
  • 嗨,马克,我正在 javascript 函数中获取 json 数据,如下所示,我想从 0 元素访问名称。请建议如何执行此操作。 $.ajax({ type: "POST", url: actionHandler, timeout: 39000, datatype: "json", data: "id="+mainContactID, beforeSend: function(msg) { }, success: function(msg) { var jsonRetData = msg; alert(msg); } });

标签: php javascript json


【解决方案1】:

你可以很容易地做到这一点:

for(i = 0; i < msg.count; i++) {
   alert(msg[i]['name']);
} 

但是由于以下几个原因,您的 JSON 对象的结构并不是那么好:

  • 不反映实际数据的结构
    我的意思是,你实际上有一个 array 对象。但在您的 JSON 对象中,数组的元素表示为对象的属性

  • 您的 JavaScript 对象属性名称无效。
    JavaScript 中对象的属性不允许以数字开头。但是对于msg = { "1": {...}},您有一个数字作为属性。
    幸运的是,它并没有那么糟糕,因为您可以使用“类似数组”访问 msg["1"](而不是“正常方式”msg.1)来访问此属性。但我会认为这是不好的做法,并尽可能避免这种做法。


因此,正如 Matthew 已经建议的那样,最好从 服务器端的数组中删除 count 条目,您将其发送到客户端之前. IE。你应该得到一个 JSON 数组:

[{
     "tel1": "Ahemdabad",
     "status": "1",
     // etc.
 },
 {    
     "tel1": null,
     "status": "1",
     // etc.
 }]

您不需要count,因为您可以使用msg.length 获取数组的长度,并且可以使用以下命令遍历数组:

for(var i in msg) {
    alert(msg[i].name);
}

【讨论】:

  • 感谢所有我设法完成的工作,我已经更改了 json return 的完整格式并且 hurrayyy 结束了。但再次感谢您与我一起大声思考这个问题。
  • JavaScript 和 JSON 对象都可以具有数字属性名称。这不是一个好主意,但它是有效的。
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多