从 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 数组键 [重复]

如何使用 JQuery 或 Javascript 使用动态路径从 JSON 对象中删除

从Javascript动态构建JSON对象列表[重复]