【问题标题】:loop through JSON returns undefined?循环遍历 JSON 返回未定义?
【发布时间】:2013-02-19 00:54:05
【问题描述】:

json:

[{"Name":"David Smith","ClaimNum":"123456789","Site":"SomeSite","ServiceDate":"2013-02-27","Program":"3","ServiceType":"168","ReportType":"ReportTypeHere","program":"Some Program 1","type":"ServiceTypeHere"},{"Name":"David Smith","ClaimNum":"123456789","Site":"SomeSite","ServiceDate":"2013-02-27","Program":"3","ServiceType":"168","ReportType":"ReportTypeHere","program":"Some Program 1","type":"ServiceTypeHere"}]

Javascript:

var obj = eval ("(" + jsonString+ ")");
var string;
for(i=0; i < obj.length; i++){
    string += obj[i].Name + " - " + obj[i].ClaimNum + " - " + obj[i].Site + " - " + obj[i].ServiceDate + " - " + obj[i].program + " - " + obj[i].type + "<br/>";
}

我使用 eval 而不是 JSON.parse,因为我们使用的一些旧 Web 浏览器不支持 JSON.parse :(

现在这确实有效,但是当我这样做时:

    document.getElementById("results").innerHTML = string;

第一个条目有:

undefinedDavid Smith

我读到这是因为长度不能用于 json 对象,因此您必须转换为数组。我以为 eval 会这样做吗?

我很茫然,想为此使用直接的 javascript。但是,如果没有其他方法可以使用 JQUERY。

有什么建议吗?

【问题讨论】:

  • 使用var str = '';,然后使用str += 'David Smith';,您应该避免使用未定义的David Smith。
  • 我使用的是 eval 而不是 JSON.parse — 如果你需要一个 shiv,获取 json2.js,不要使用 eval。
  • 从哪里获得 json2.js?我想这是一个 json 解析器脚本?
  • @Quentin - 我找到了 json2.js,我像这样使用它: var json_data = JSON.stringify(obj);把json数据变成数组?
  • 没有。您正在解析 JSON 文本,而不是将对象转换为一个对象。 var inflated_from_json = JSON.parse(string_of_json_text);

标签: javascript arrays json for-loop


【解决方案1】:

string的初始值为undefined,字符串化后变为"undefined"

所以string += obj[i].Name etc etc 表示string = "undefined" + obj[i].Name etc etc

在初始化时为string分配一个空字符串。

var string = "";

我读到这是因为长度不能用于 json 对象,因此您必须转换为数组。

“json 对象”是一个非常无用的术语。

JSON 对象是浏览器提供的具有解析和序列化方法的对象。

JSON 文本是一段经常被错误识别为“对象”的 JSON。

JSON 中的对象是具有命名键和值的数据结构。

如果您将 JSON 文本解析为 JavaScript(这就是您使用 eval 所做的事情),那么您将获得一个 JavaScript 数据结构。如果你访问一个对象的length 属性,那么它将是undefined,除非你给它一个length 属性。外部数据结构是一个 array ,这就是您要循环的内容。数组确实具有length 属性(等于数组中最大整数键名的值)。

【讨论】:

  • 先生,您是救生员 :) 谢谢!
猜你喜欢
  • 2015-11-25
  • 2012-11-29
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2017-11-01
相关资源
最近更新 更多