2

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

所以在 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:{
      ...
    }
  }
}

但每次我这样做时,萤火虫都会抛出以下错误:

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

4

3 回答 3

3

我认为您可以将 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 动态写入文本字段并确保其格式正确。

于 2008-10-24T14:13:37.460 回答
0

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

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

于 2008-10-24T14:11:53.067 回答
0

这行得通。只需将其转储到脚本块中进行测试。

    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)
于 2008-10-24T14:12:54.467 回答