Javascript 解析包含数组数组的json给出';未定义';

Javascript 解析包含数组数组的json给出';未定义';,javascript,arrays,json,parsing,Javascript,Arrays,Json,Parsing,我试图访问JSON中数组的数组中的元素,但我得到了未定义的 错误-未捕获类型错误:无法读取第9$(“#jsondata”)行中未定义的属性“lsi_short_name”。追加( 代码如下所示: var data = '{"response":[[{"1":{"type":"p","lsi_short_name":"A","entities":["term_Quantity"]}}, {"2":{"type":"p","lsi_short_name":"B","entities":["term_

我试图访问JSON中数组的数组中的元素,但我得到了
未定义的

错误-未捕获类型错误:无法读取第9$(“#jsondata”)行中未定义的属性“lsi_short_name”。追加(

代码如下所示:

var data = '{"response":[[{"1":{"type":"p","lsi_short_name":"A","entities":["term_Quantity"]}}, {"2":{"type":"p","lsi_short_name":"B","entities":["term_Quantity"]}}, {"4":{"type":"d","lsi_short_name":"D","entities":["term_Quantity"]}}, {"5":{"type":"p","lsi_short_name":"E","entities":["term_Quantity"]}}], [{"1":{"type":"p","lsi_short_name":"A","entities":["term_Quantity"]}}, {"2":{"type":"p","lsi_short_name":"B","entities":["term_Quantity"]}}, {"4":{"type":"d","lsi_short_name":"D","entities":["term_Quantity"]}}, {"6":{"type":"p","lsi_short_name":"F","entities":["term_Quantity"]}}]]}';
var obj = JSON.parse(data);

for(i=0;i<obj.response.length;i++) {
    for (j=0; j < obj.response[i].length; j++) {
        $("#jsondata").append("<li onclick=jsonDetails('"+obj.response[i][j][j+1]['lsi_short_name'] +"','"+ obj.response[i][j][j+1]['entities']+"','"+ obj.response[i][j][j+1]['attributes']+"')>"+obj.response[i][j][j+1]['lsi_short_name']+"</li>");  
    }
    $("#jsondata").append("<br>");
}
var数据={response:[{“1”:{“type”:“p”,“lsi_short_name”:“A”,“entities”:[“term_Quantity”]},{“2”:{“type”:“p”,“lsi_short_name”:“B”,“entities”:[“term_Quantity”},{“4”:{“type”:“d”,“lsi_short_name”:“d”,“entities”:[“term_Quantity”]},{“5”:“type”:“p”,“lsi_short_name”:“E”,“lsiu“A”、“实体”:[“术语数量”]}、{“2”:{“类型”:“p”、“lsi数量短小名称”:“B”、“实体”:[“术语数量”]}、{“4”:{“类型”:“d”、“lsi数量短小名称”:“d”、“实体”:[“术语数量”]}、{“6”:{“类型”:“p”、“lsi数量短小名称”:“F”、“实体”:“术语数量”}];
var obj=JSON.parse(数据);

对于(i=0;i您的密钥顺序不是串行的,这就是为什么您不应该使用
j+1
。因此,您可以先使用
Object.keys()
获取确切的密钥,然后访问属性:例如:

var data = '{"response":[[{"1":{"type":"p","lsi_short_name":"A","entities":["term_Quantity"]}}, {"2":{"type":"p","lsi_short_name":"B","entities":["term_Quantity"]}}, {"4":{"type":"d","lsi_short_name":"D","entities":["term_Quantity"]}}, {"5":{"type":"p","lsi_short_name":"E","entities":["term_Quantity"]}}], [{"1":{"type":"p","lsi_short_name":"A","entities":["term_Quantity"]}}, {"2":{"type":"p","lsi_short_name":"B","entities":["term_Quantity"]}}, {"4":{"type":"d","lsi_short_name":"D","entities":["term_Quantity"]}}, {"6":{"type":"p","lsi_short_name":"F","entities":["term_Quantity"]}}]]}';
//var data = '{"response": "[[{"1": {"attributes": [], "entities": [], "lsi_short_name": "a", "type": "process"}}, {"2": {"attributes": ["d"], "entities": ["c"], "lsi_short_name": "b", "type": "process"}}], [{"1": {"attributes": [], "entities": [], "lsi_short_name": "a", "type": "process"}},{"6": {"attributes": [], "entities": [], "lsi_short_name": "f", "type": "process"}}]]"}';

var obj = JSON.parse(data);
for(var i = 0; i < obj.response.length; i++) {
    for (var j = 0; j < obj.response[i].length; j++) {
        var key = Object.keys(obj.response[i][j])[0];
        $("#jsondata").append("<li onclick=jsonDetails('" + obj.response[i][j][key]['lsi_short_name'] +"','"+ obj.response[i][j][key]['entities']+"','"+ obj.response[i][j][key]['attributes']+"')>"+obj.response[i][j][key]['lsi_short_name']+"</li>");
    }
    $("#jsondata").append("<br>");
}
var数据={response:[{“1”:{“type”:“p”,“lsi_short_name”:“A”,“entities”:[“term_Quantity”]},{“2”:{“type”:“p”,“lsi_short_name”:“B”,“entities”:[“term_Quantity”},{“4”:{“type”:“d”,“lsi_short_name”:“d”,“entities”:[“term_Quantity”]},{“5”:“type”:“p”,“lsi_short_name”:“E”,“lsiu“实体”:[“术语数量”]}、{“2”:{“类型”:“p”、“lsi数量”]}、{“实体”:[“术语数量”]}、{“4”:{“类型”:“d”、“lsi数量”]}、{“实体”:[“术语数量”]}、{“6”:{“类型”:“p”、“lsi数量”]:“F”、“实体”:“术语数量”}];
//变量数据={“响应”:“[{“1”:{“属性”:[],“实体”:[],“lsi_short_名称”:“a”,“类型”:“流程”}},{“2”:{“属性”:[“d”],“实体”:[“c”],“lsi_short_名称”:“b”,“类型”:“流程”}],{“1”:{“属性”:[],“实体”:“流程”},“实体”:[],“lsi_short_名称”:“a”,“类型”:“流程”},{“6”:“属性[,“lsi_实体”},”:“f”,“type:“process”}}]“}';
var obj=JSON.parse(数据);
对于(变量i=0;i“+obj.response[i][j][key]['lsi][j][key][i][i][i][j][key][lsi][u short\u name][li>”;
}
$(“#jsondata”)。追加(“
”); }
您的for循环应该如下所示:

var obj = JSON.parse(data);
for(i=0;i<obj.response.length;i++){
    var x = obj.response[i];
    for (j=0; j < x.length; j++) {    
       //Assuming the keys are serial else you need to get all the keys using Object.keys method.
       var keyName = (j+1).toString();
       //Access various prop of your json like this -->    x[j][keyName]["lsi_short_name"]
    }
}
var obj=JSON.parse(数据);
对于(i=0;i x[j][keyName][“lsi_short_name”]
}
}

您试图访问超出数组长度的对象。您也没有任何名为attributes的属性

您可以先从对象中获取值,然后按照以下方式使用索引:

var数据={response:[{“1”:{“type”:“p”,“lsi_short_name”:“A”,“entities”:[“term_Quantity”]},{“2”:{“type”:“p”,“lsi_short_name”:“B”,“entities”:[“term_Quantity”},{“4”:{“type”:“d”,“lsi_short_name”:“d”,“entities”:[“term_Quantity”]},{“5”:“type”:“p”,“lsi_short_name”:“E”,“lsiu“实体”:[“术语数量”]}、{“2”:{“类型”:“p”、“lsi数量”]}、{“实体”:[“术语数量”]}、{“4”:{“类型”:“d”、“lsi数量”]}、{“实体”:[“术语数量”]}、{“6”:{“类型”:“p”、“lsi数量”]:“F”、“实体”:“术语数量”}];
var obj=JSON.parse(数据);

对于(设i=0;i@Jaromanda但是它显示了除2个元素以外的所有元素的结果,对于第2个数组,在开始内部for循环之前,您需要捕获元素。好的…刚刚意识到您这样做了…但是您的循环看起来不正确哦,我明白了,那里有一个带有数字键的对象,它不是arrayindex 0有一个带有键1的对象-因此[j][j+1]将起作用,类似地,索引1有一个带有键2的对象。但索引2有一个带有键4的对象,而3有键5…它们加起来…这在结果[0]…在结果[1]中您的对象具有键1、2、4、6…前两个同样有效,但最后两个在x.length处的wontgetting错误-Uncaught TypeError:无法使用var x=obj.response[i]读取undefinedtry的属性'length';(上面更新了我的代码)