使用动态密钥解析JSON字符串

时间:2017-07-14 17:01:58

标签: javascript json

我有JSON数据如下 -

var raw = {"raw":[{"W4Jlp9HKx_MVImNZuJwPqA!!:dgIN_ZskRAf5OtpgZ7tYLQ!!":{"name":"Name1","uniqID":"W4Jlp9HKx_MVImNZuJwPqA!!:dgIN_ZskRAf5OtpgZ7tYLQ!!"},"uFzQkOcsEwmRDGlob11Qiw!!:ArYiisKagqjnqMGfbKP7Yw!!":{"name":"Name2","uniqID":"uFzQkOcsEwmRDGlob11Qiw!!:ArYiisKagqjnqMGfbKP7Yw!!"},"fWcL6bvhCvp1wO95-7K3LA!!:XNYxDArq9E_6u2yaDbST0A!!":{"name":"Name3","uniqID":"fWcL6bvhCvp1wO95-7K3LA!!:XNYxDArq9E_6u2yaDbST0A!!"}}]}

键是动态的,即第一个键“W4Jlp9HKx_MVImNZuJwPqA !!:dgIN_ZskRAf5OtpgZ7tYLQ !!”我们对JSON URL进行的每次调用都会发生变化。

我想解析JSON数据并将数据存储在Javascript变量中。

我试图用 -

来解析它
var arra = JSON.parse(raw);

并尝试使用

获取值
arra.raw[0].W4Jlp9HKx_MVImNZuJwPqA!!:dgIN_ZskRAf5OtpgZ7tYLQ!!.name

但这没有帮助,我没有得到这个值。我不确定为什么会发生这种情况。是因为键包含特殊字符?

如果有一种方法可以列出密钥并使用密钥索引或类似的东西获取值,那将会很棒,例如

arra.raw[0].key(0).name

其中我不必提供密钥,因为它随着每次通话而变化。即使使用密钥名称的工作解决方案现在还不够用。

我更喜欢在Javascript中实现这一点,如果不可能,请随时告诉我用什么语言来实现。

非常感谢!

---编辑---

在评论中给出了使用带有特殊字符的键获取值的答案,我不得不使用[]表示法来获取结果。非常感谢! 但是关于使用关键位置获取结果的第二个问题,比关键名称仍然是开放的。

2 个答案:

答案 0 :(得分:1)

window.parent.parent.focus();

如果您在之前实施密钥可能会有效:

arra.raw[0].key(0).name

或者如果你不介意使用原生方式:

Object.defineProperty(Object.prototype,"key",{
 enumerable:false,
 value: function(key){
    return this[Object.keys(this)[key]||key];
  }
});

答案 1 :(得分:1)

您可以再使用一个解决方案https://jsfiddle.net/bm1n59hf/1/

var data = {"raw":[{"W4Jlp9HKx_MVImNZuJwPqA!!:dgIN_ZskRAf5OtpgZ7tYLQ!!":{"name":"Name1","uniqID":"W4Jlp9HKx_MVImNZuJwPqA!!:dgIN_ZskRAf5OtpgZ7tYLQ!!"},"uFzQkOcsEwmRDGlob11Qiw!!:ArYiisKagqjnqMGfbKP7Yw!!":{"name":"Name2","uniqID":"uFzQkOcsEwmRDGlob11Qiw!!:ArYiisKagqjnqMGfbKP7Yw!!"},"fWcL6bvhCvp1wO95-7K3LA!!:XNYxDArq9E_6u2yaDbST0A!!":{"name":"Name3","uniqID":"fWcL6bvhCvp1wO95-7K3LA!!:XNYxDArq9E_6u2yaDbST0A!!"}}]};

for(var key in data.raw[0]){
	console.log("KEY: " + key + "    Name: " + data.raw[0][key].name + "   ");
}