从 JSON 使用 Javascript 创建动态关联数组
Posted
技术标签:
【中文标题】从 JSON 使用 Javascript 创建动态关联数组【英文标题】:Dynamic Associative Array Creation in Javascript from JSON 【发布时间】:2010-09-19 00:24:40 【问题描述】:这听起来比实际上要复杂得多。
所以在 Perl 中,你可以这样做:
foreach my $var (@vars)
$hash_table$var->'id' = $var->'data';
我有一个 JSON 对象,我想做同样的事情,但在 jQuery 中使用 javascript 关联数组。
我尝试了以下方法:
hash_table = new Array();
$.each(data.results), function(name, result)
hash_table[result.(name).extra_info.a] = result.(name).some_dataset;
);
其中 data 是从 $.getJSON 调用获得的 JSON 对象。它看起来或多或少是这样的(我的 JSON 语法可能有点不对,抱歉):
results:
datasets_a:
dataset_one:
data:
//stuff
extra_info:
//stuff
dataset_two:
...
...
datasets_b:
...
但是每次我这样做时,firebug都会抛出以下错误:
“XML 过滤器应用于非 xml 数据”
【问题讨论】:
【参考方案1】:我认为您可以将 JSON 响应用作关联数组。所以应该可以直接进去使用JSON了。
假设你收到了上面的例子:
$('result').innerhtml = data['results']['dataset_a']['dataset_two']['data'];
// Or the shorter form:
$('result').innerHTML = data.results.dataset_a.dataset_two.data;
了解我没有对此进行测试,但使用方括号和变量比使用括号加上名称和点访问器更安全。
由于我刚刚发现的一些复杂逻辑,您的示例失败了。
$.each(data.results), function(name, result)
hash_table[result.(name).extra_info.a] = result.(name).some_dataset;
);
现在,foreach 循环遍历变量data.results
以查找深度为 1 的内部元素。它找到的项被赋予带有该项的键的 lambda。 AKA,第一个结果将是 name = "datasets_a" item = object
。一直跟着我?现在您访问返回的哈希值,即item
中的对象,就好像它在name
...“datasets_a”中有子键。但是等等,这个是对象!
如果一切都失败了...将结果 JSON 动态写入文本字段并确保其格式正确。
【讨论】:
在你的最后一个代码块中,它应该是函数(名称,结果)。 name 是键,结果是该键的值。 我接受了第一部分,因为事实证明我可以直接访问 json 对象。愚蠢的我一开始就没有意识到这一点。 好吧,在 MooTools 中它是相反的,所以我习惯了那个模型。 +1 告诉我data['results']['dataset_a']['dataset_two']['data'];
调用 json 对象的方式。
方括号是可用于数组arr = [1]; arr[0]
和对象obj = foo : 'hello world'; obj['foo']; x = 'foo'; obj[x]
的访问器【参考方案2】:
为什么要将一个数组更改为另一个数组?-)
--为什么不简单访问数据,如果要简化或过滤,可以直接遍历对象的数组!-)
【讨论】:
【参考方案3】:这行得通。只需将其转储到脚本块中即可进行测试。
d =
'results':
'datasets_a':
'dataset_one':
'data':
'sample':'hello'
,
'extra_info':
//stuff
,
'dataset_two':
///
///
,
'datasets_b':
///
alert(d.results.datasets_a.dataset_one.data.sample)
我希望这个粘贴正确。这个编辑器不喜欢我在代码中的换行符。
d =
'results':
'datasets_a':
'dataset_one':
'data':
'sample':'hello'
,
'extra_info':
//stuff
,
'dataset_two':
///
///
,
'datasets_b':
///
;
alert(d.results.datasets_a.dataset_one.data.sample)
【讨论】:
以上是关于从 JSON 使用 Javascript 创建动态关联数组的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript 从 json 数据中动态嵌套 ul\li 列表
从 json 动态创建的 Javascript 表单输入,需要将对象映射到另一个对象的正确字段并保存
如何使用javascript删除动态创建的json对象中的多余引号?
在 JavaScript 中动态创建 JSON 数组键 [重复]