听起来比实际要复杂得多。

因此,在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语法可能有点差了):

{
  results:{
    datasets_a:{
      dataset_one:{
        data:{
          //stuff
        }
        extra_info:{
          //stuff
        }
      }
      dataset_two:{
         ...
      }
      ...
    }
    datasets_b:{
      ...
    }
  }
}


但是每次我这样做时,firebug都会引发以下错误:

“ XML过滤器应用于非xml数据”

最佳答案

我认为您可以将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。又名,第一个结果将是name = "datasets_a" item = object。到目前为止跟着我吗?现在,您访问返回的哈希,即item中的对象,就像它在name ...“ datasets_a”中具有子项一样。但是,等等,这是对象!

如果所有其他方法均失败...将结果JSON动态写入文本字段,并确保其格式正确。

07-24 09:43
查看更多