解析JSON字符串动态密钥

问题描述:

我有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网址的每次呼叫而改变。

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

我试图解析这与 -

var arra = JSON.parse(raw); 

并试图获得使用

arra.raw[0].W4Jlp9HKx_MVImNZuJwPqA!!:dgIN_ZskRAf5OtpgZ7tYLQ!!.name 

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

这将是巨大的,如果有一种方法列出向下键以及和获取与关键指标或类似的东西,即价值的东西像

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

其中,我没有给关键在于它随着每个呼叫而变化。即使现在没有使用关键名称的工作解决方案就足够了。

我希望在Javascript中实现这一点,如果不可能,请随时让我知道它可以实现什么语言。

非常感谢!

---编辑---

这个问题的答案越来越关键的使用与特殊字符的评论已被赋予了价值,我不得不用[]符号来获取结果。谢谢很多家伙! 但关于使用关键位置获取结果的第二个问题比关键名称保持打开。如果实现关键


+0

从https://*.com/questions/11922383/access-process-nested-objects-arrays-or-json,可以使用括号记号:'arra.raw [0] [ “W4Jlp9HKx_MVImNZuJwPqA !!:dgIN_ZskRAf5OtpgZ7tYLQ !!”]。name] – apsillers

+4

是否有可能更改JSON数据源,因为具有随机或不可知属性名称的对象没有用,数组会更好。 – James

+0

!!是双重没有。使用括号符号! –

在这里你去多一个解决方案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]){ 
 
\t console.log("KEY: " + key + " Name: " + data.raw[0][key].name + " "); 
 
}

+0

非常感谢。这很顺利。 – iMan

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

可能前工作:

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

或者,如果您使用本机的方式不介意:

Object.values(arra.raw[0])[0].name 
+0

谢谢,我会试试。虽然我不完全明白这个功能会发生什么。 – iMan

+0

很酷,唯一令人困惑的部分是,现在数组,对象,字符串,函数......都会有'keys'方法。 – dfsq

+0

@dfsq * key *,* keys *可能会与地图相冲突......如果多次使用它可能会很有用 –