循环通过JSON返回undefined?

时间:2013-03-04 19:54:00

标签: javascript arrays json for-loop

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。

任何建议?

1 个答案:

答案 0 :(得分:3)

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

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

初始化时,将空字符串分配给string

var string = "";

  

我读到这是因为长度无法在json对象上使用,因此必须转换为数组。

“json object”是一个非常无益的术语。

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

JSON文本是一段JSON,经常被误认为是“对象”。

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

如果您将JSON文本解析为JavaScript(这是您使用eval进行的操作),那么您将获得JavaScript数据结构。如果您访问对象的length属性,那么除非您为其提供undefined属性,否则它将为length。外部数据结构是数组,这就是你要循环的内容。数组 do 具有length属性(等于数组中最高整数键名的值)。