如果我有以下几种:

{"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
}

我有一个"人类发展报告"的名称(即"作出"),我怎么可以参考的 data 阵列的实例?似乎喜欢 data["Make"][0] 应该工作.但无法得到正确的参考

编辑

对不起,模糊..我可以循环 hdrs 得到每个hdr的名字,但我需要利用每个实例的价值 hdrs 找到的所有数据元素 data (不一定是更好的解释)。我将它放在一个变量 t 因为它是JSON(赞赏重新标记),我希望能够参与这样的事情: t.data[hdrs[i]][j]

有帮助吗?

解决方案

我不得不改变你的代码一点:

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };

        alert( x.data[0].Make );

编辑:在响应你的编辑

var x = {"hdrs": ["Make","Model","Year"],
         "data" : [ 
           {"Make":"Honda","Model":"Accord","Year":"2008"},
           {"Make":"Toyota","Model":"Corolla","Year":"2008"},
           {"Make":"Honda","Model":"Pilot","Year":"2008"}]
        };
var Header = 0; // Make
for( var i = 0; i <= x.data.length - 1; i++ )
{
    alert( x.data[i][x.hdrs[Header]] );
}           

其他提示

因此,这样吗?

var theMap = /* the stuff you posted */;
var someHdr = "Make";
var whichIndex = 0;
var correspondingData = theMap["data"][whichIndex][someHdr];

应工作,如果我理解正确的话...

var x = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"}
   {"Make":"Toyota","Model":"Corolla","Year":"2008"}
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

x.data[0].Make == "Honda"
x['data'][0]['Make']  == "Honda"

你有你的阵/哈希查找倒退:)

我不确定我明白你的问题,但是...

假设上述JSON是var obj,你想:

obj.data[0]["Make"] // == "Honda"

如果你只是想要参考该领域所引用的第一个标题,它会喜欢的东西:

obj.data[0][obj.hdrs[0]] // == "Honda"

首先,你忘了你的后的逗号在你的阵列数据的项目。

试试下面的:

var obj_hash = {
    "hdrs": ["Make","Model","Year"],
    "data" : [
        {"Make":"Honda","Model":"Accord","Year":"2008"},
        {"Make":"Toyota","Model":"Corolla","Year":"2008"},
        {"Make":"Honda","Model":"Pilot","Year":"2008"},
    ]
};

var ref_data=obj_hash.数据;

alert(ref_data[0].Make);

@肯特弗雷德里克:注意最后的逗号并不是严格必要的,但可以更容易地移动线周围(即,如果你移动或增加后的最后一线,并且它没有一个逗号,你必须特别记得添加一个。我认为这是最好的,总是有后逗号。)

也许是尝试数据的[0]。让

靠近,你会用

var x = data[0].Make;
var z = data[0].Model;
var y = data[0].Year;

你的代码显示是不是语法上正确的;它需要一些逗号。我得到这个工作:

$foo = {"hdrs": ["Make","Model","Year"],
 "data" : [ 
   {"Make":"Honda","Model":"Accord","Year":"2008"},
   {"Make":"Toyota","Model":"Corolla","Year":"2008"},
   {"Make":"Honda","Model":"Pilot","Year":"2008"}]
};

然后我可以访问的数据为:

$foo["data"][0]["make"]

与帮助的答复(并在获得内部和外部的循环正确的)我得到这个工作:

var t = eval( "(" + request + ")" ) ;
for (var i = 0; i < t.data.length; i++) {
 myTable +=    "<tr>";
 for (var j = 0; j < t.hdrs.length; j++) {
  myTable += "<td>" ;
   if (t.data[i][t.hdrs[j]] == "") {myTable += "&nbsp;" ; }
    else { myTable += t.data[i][t.hdrs[j]] ; }
  myTable += "</td>";
 }
 myTable +=    "</tr>";
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top