2013-10-22 86 views
0

我有这样一个JSON:获取JSON值不字符串前缀

变种X = { “富:酒吧”: “XYZ”};

我可以通过调用x [“foo:bar”]来获得xyz,但无论如何通过调用bar来取得xzy并删除foo前缀?像x [“酒吧”]? json是从xml中用名字空间转换的,我无法改变它。由于

+2

创建您的JSON,使钥匙只是'酒吧'。 –

+0

“正确”是什么意思?谁创建了json - 你呢?如果是你,只需按照@JustinWood的建议,并修改你输出的方式。 –

+0

json是从xml转换而来的名称空间,我不能改变它:( – Duc

回答

2

可以遍历的属性名称,并删除前缀:

function removePrefix(x){ 
    var temp = {}; 
    for(var key in x){ 
     temp[key.substr(key.indexOf(':')+1)] = x[key]; 
    } 
    return temp; 
} 

var x = {"foo:bar":"xyz"}; 

x = removePrefix(x); 

console.log(x['bar']); // xzy 
console.log(x.bar); // xyz 
+0

如果json的结构更复杂,例如:它有child和array吗? – Duc

0

您可以创建一个JSON字符串这将是这样的:

var x = {"foo":"xyz"}; 

当前的关键:"foo:bar"没有在JSON任何特殊的意义,这是关键的组成部分。

0

在任何生产环境中去@MrCode(或对您的问题第一个注释),但如果你只是有一个有点乐趣,你总是可以尝试生活在边缘...

var x = {"foo:bar":"xyz"}; 

for(i in x){ 
    if(x.hasOwnProperty(i)){ 
     var m = /^foo:(.*)$/.exec(i); 
     if(m.length) x.__defineGetter__(m[1], function(){ 
      return this['foo:'+m[1]]; 
     }); 
    } 
} 

console.log(x.bar); // "xyz"