我目前正在获取包含两个对象的 JSON:一个是 COLUMNS,另一个是 DATA。其中每个都是分别具有适当列名和匹配数据的数组。
这是 JSON:
{
"COLUMNS":[
"NUM",
"USERID",
"NAME",
"YEARCREATED",
"LASTCONTACTED",
"RELATIONSHIP"
],
"DATA":[
[
8,
333,
"Joe Smith",
2015,
"January, 19 2015 00:00:00",
"30 Days"
]
]
}
我想做的是使用 jQuery 迭代 DATA 数组(当前数组中只有一个对象):
var jsonSource = {"COLUMNS":["NUM","USERID","NAME","YEARCREATED","LASTCONTACTED","RELATIONSHIP"],"DATA":[[8,333,"Joe Smith",2015,"January, 19 2015 00:00:00","30 Days"]]}
$.each(jsonSource, function( COLUMNS, DATA ) {
console.log( jsonSource );
});
我在控制台中返回的是整个 JSON 树。
如何使输出成为“Joe Smith”(不带引号)?
最佳答案
DATA
是包含实际数据的列数组,因此现在只需忽略 COLUMNS
。
$.each(jsonSource.DATA, function( COLUMNS, DATA ) {
console.log( jsonSource );
});
现在查看jQuery.each在文档中您可以看到回调方法获取 indexInArray
和 value
作为参数,因此让我们更新回调。请记住,indexInArray 与 DATA 中存在多少行有关,而不是与 COLUMNS
中的 NAME
等位置相关。
$.each(jsonSource.DATA, function( indexInArray, value ) {
console.log( jsonSource );
});
现在我们不再输出整个 JSON 树,而是使用每个树的特定迭代。由于我们知道 NAME
是该行中的第三项,因此我们现在只需对其进行硬编码。
$.each(jsonSource.DATA, function( indexInArray, value ) {
console.log( value[2] );
});
现在假设不能保证 COLUMNS
的顺序。我们总是需要NAME
,但它可以是任何列。
$.each(jsonSource.DATA, function( indexInArray, value ) {
console.log( value[jsonSource.COLUMNS.indexOf('NAME')] );
});
当然,这是一条复杂的线,因此在真实的程序中您可能会想要这样的东西。
function getColumnIndex(columns, key) {
return columns.indexOf(key)
}
var nameIndex = getColumnIndex(jsonSource.COLUMNS, 'NAME');
$.each(jsonSource.DATA, function( indexInArray, value ) {
console.log( value[nameIndex] );
});
关于javascript - 使用 jQuery 读取 JSON 并通过 ID 匹配字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28530405/