从JSON在Javascript中创建动态关联数组

从JSON在Javascript中创建动态关联数组,javascript,jquery,json,Javascript,Jquery,Json,听起来比实际情况复杂得多 因此,在Perl中,您可以执行如下操作: foreach my $var (@vars) { $hash_table{$var->{'id'}} = $var->{'data'}; } 我有一个JSON对象,我想做同样的事情,但是在jQuery中有一个javascript关联数组 我尝试了以下方法: hash_table = new Array(); $.each(data.results), function(name, result) {

听起来比实际情况复杂得多

因此,在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;
});
其中数据是从$.getJSON调用获取的JSON对象。它看起来或多或少是这样的(对不起,我的JSON语法可能有点不正确):

但每次我这样做,firebug都会抛出以下错误:


“XML筛选器应用于非XML数据”

为什么要将一个数组更改为另一个数组?-)


--为什么不直接访问数据呢?如果要简化或过滤,可以直接遍历对象的数组

这是有效的。只需将其转储到脚本块中进行测试

    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响应用作关联数组。因此,您应该能够直接进入并使用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\u a”item=object
。跟踪我到现在?现在,您可以访问返回的散列,即
中的对象,就好像它在
名称
中有子键一样。。。“数据集”。但是,等等,这就是对象


如果其他一切都失败了。。。将结果JSON动态写入文本字段,并确保其格式正确。

在上一个代码块中,它应该是函数(名称、结果)。name是键,result是键的值。我接受了第一部分,因为我可以直接访问json对象。我真傻,一开始就没有意识到。好吧,在MooTools中,它是反向的,所以我习惯了这个模型。+1告诉我
data['results']['dataset_a']['dataset_two']['data']调用json对象的方式。方括号是可以在数组上使用的访问器
arr=[1];arr[0]
和objects
obj={foo:'hello world'};obj['foo'];x=‘foo’;obj[x]
$.each(data.results), function(name, result) {
     hash_table[result.(name).extra_info.a] = result.(name).some_dataset;
});