2015-12-01 72 views
3

我目前正在尝试从字典数组中获取值,而不知道密钥。Javascript JSON字典对象

[{ 
    "msmittens007": 39717783 
}, { 
    "starboynaseem321": 60806140 
}, { 
    "creeper333888": 32048827 
}, { 
    "simontax": 52222895 
}, { 
    "marissahill55": 44062186 
}, { 
    "tgibs1": 52704223 
}, { 
    "angelsunrise7": 57944274 
}, { 
    "nicks24": 51306000 
}, { 
    "opticbomb": 21804587 
}, { 
    "KhloeTheMoaiOwie": 26598082 
}] 

我目前的JSON。我需要能够获得附在钥匙上的价值。我是JSON的新手,所以对我来说很难。

对不起,如果有点模棱两可,但我将如何访问没有密钥的值?例如而不是jsonTable["msmittens007"]得到39717783,我需要能够做点像jsonTable[1] = 39717783

我希望你能理解。

谢谢!

+3

这是一个非常糟糕的数据结构开始,正是因为你指出的问题。您应该在字典中定义键,或者应该只有一个字典而不是它们的数组。你可以改变数据结构吗? – deceze

+0

是的。这不是我的API,所以不是。 – Max

+1

'jsonTable [ “msmittens007”]'返回undefined,'有jsonTable [0] [ “msmittens007”]'回报39717783 –

回答

1

好了,我看到你JSON结构,下面是从JSON访问所有的值的方式:

var data = [{"msmittens007":39717783},{"starboynaseem321":60806140},{"creeper333888":32048827},{"simontax":52222895},{"marissahill55":44062186},{"tgibs1":52704223},{"angelsunrise7":57944274},{"nicks24":51306000},{"opticbomb":21804587},{"KhloeTheMoaiOwie":26598082}]; 

    var valueCollection = []; 
     for (var i= 0; i<data.length; i++){ 
      for(var key in data[i]){ 
      var value = data[i][key]; // you can use this value  
      valueCollection.push(value); // for sample pushing into array you can use as per you need here 
      } 
     } 

valueCollection是包含所有值的样本数组。

希望这将帮助你:)

+0

完美!这很好用!非常感谢。 – Max

+0

最受欢迎..快乐编码:) –

+0

现代阵列的方法,如其他答案使这个更具可读性... @Max希望你真正看了看其他的答案。 – epascarello

0

可以将其映射到对象:

var hash = {}; 

for(var i=0; i<json.length; i++) { 
    for(var k in json[i]) { 
     hash[k] = json[i][k]; 
    } 
} 

return hash['msmittens007']; 
+0

基本上,我需要能够与替代的编号与一键访问它。例如返回散列[1];这是我的程序可以工作的唯一方式,因为有用的位是数字位。 – Max

2

您需要在对象上的数组映射到一个数组

var arr = [{"msmittens007":39717783},{"starboynaseem321":60806140}, 
      {"creeper333888":32048827},{"simontax":52222895}, 
      {"marissahill55":44062186},{"tgibs1":52704223}, 
      {"angelsunrise7":57944274},{"nicks24":51306000}, 
      {"opticbomb":21804587},{"KhloeTheMoaiOwie":26598082}]; 

var updated = arr.map(function(obj){ //map returns a new array based on what you return 
    var keys = Object.keys(obj); //get the keys for this object 
    return obj[keys[0]];   //return the property value for this object 
}); 

console.log(updated[0]); 
1

把你的阵列到地图,如果你需要直接访问密钥。我提出这个问题而不是你提出的问题,因为有可能这个对象是一个C#字典,因为这是.NET如何序列化它们,所以我以前用它来将.NET的JSON字典变成一个普通的对象

var arr = [{"msmittens007":39717783},{"starboynaseem321":60806140},{"creeper333888":32048827},{"simontax":52222895},{"marissahill55":44062186},{"tgibs1":52704223},{"angelsunrise7":57944274},{"nicks24":51306000},{"opticbomb":21804587},{"KhloeTheMoaiOwie":26598082}]; 
 

 

 
var obj = arr.reduce(function(prev, next) { 
 
    var key = Object.keys(next)[0]; 
 
    prev[key] = next[key]; 
 
    return prev; 
 
},{}); 
 

 
console.log(obj.msmittens007); // 39717783 
 
console.log(obj.starboynaseem321); // 60806140

把它变成值的数组,如果你不关心的密钥。我想知道这可能是有用的...

var arr = [{"msmittens007":39717783},{"starboynaseem321":60806140},{"creeper333888":32048827},{"simontax":52222895},{"marissahill55":44062186},{"tgibs1":52704223},{"angelsunrise7":57944274},{"nicks24":51306000},{"opticbomb":21804587},{"KhloeTheMoaiOwie":26598082}]; 
 

 
var valuesOnly = arr.map(function(item){ 
 
    return item[Object.keys(item)[0]]; 
 
}); 
 

 
console.log(valuesOnly); 
 
// [39717783, 60806140, 32048827, 52222895, 44062186, 52704223, 57944274, 51306000, 21804587, 26598082]

0

能够像做jsonTable [1] = 39717783 ..

你可以重新映射:

var arr = [{ 
 
    "msmittens007": 39717783 
 
}, { 
 
    "starboynaseem321": 60806140 
 
}, { 
 
    "creeper333888": 32048827 
 
}, { 
 
    "simontax": 52222895 
 
}, { 
 
    "marissahill55": 44062186 
 
}, { 
 
    "tgibs1": 52704223 
 
}, { 
 
    "angelsunrise7": 57944274 
 
}, { 
 
    "nicks24": 51306000 
 
}, { 
 
    "opticbomb": 21804587 
 
}, { 
 
    "KhloeTheMoaiOwie": 26598082 
 
}]; 
 

 
var mapped =arr.map(x=> x[Object.keys(x)[0]]) 
 
console.log( mapped[0] )

0

正如@deceze在评论部分指出的那样,你的数据结构看起来很奇怪,它是一个键值对的列表,与字典不太一样。

无论如何,如果你想通过数字键访问这些值,你可以使用Array#map来这样做。

var json = [{"msmittens007":39717783},{"starboynaseem321":60806140},{"creeper333888":32048827},{"simontax":52222895},{"marissahill55":44062186},{"tgibs1":52704223},{"angelsunrise7":57944274},{"nicks24":51306000},{"opticbomb":21804587},{"KhloeTheMoaiOwie":26598082}]; 

var jsonTable = json.map(function (pair) { 
    var keys = Object.keys(pair); 
    return pair[keys[0]]; 
}); 

console.log(jsonTable[0]); // 39717783