2013-03-13 76 views
2

我更读到这里,但我还没有找到答案,我的问题 我的问题:JSON到关联数组中的jQuery

我有(从通过AJAX返回JSON字符串PHP)

str = '[{"id":"159","pavadinimas":"Building B","_id":"200",.................}]'; 

这是JSON字符串,我做obj = $.parseJSON(str); 我可以采取任何价值以这种方式就像alert(obj[0]._id)我得到200

但我怎么能得到联想从JSON数组一样:

dataArray = [ 
"id":"159", 
"pavadinimas":"Building B", 
"_id":"200", 
... 
] 

我想获得价值200一样,

val = dataArray['_id']; 
+0

'dataArray中的obj = [0];'。 'obj'实际上是一个对象数组,所以如果你想引用第一个对象,你只需将它分配给一个变量。 – 2013-03-13 08:05:16

+0

你刚刚随机发明了一些非Javascript语法。为什么? – 2013-03-13 08:19:44

回答

6

JavaScript中没有关联数组的概念,但只有对象。

var arr = $.parseJSON(str); 
var obj = arr[0]; 
var _id = obj['_id'] 
+1

和JS中的所有对象都用于所有目的的关联数组 – 2013-03-13 08:13:36

4

JavaScript没有关联数组。您将不得不使用使用大括号{}代替的对象。

dataObj = { 
    "id":"159", 
    "pavadinimas":"Building B", 
    "_id":"200", 
    ... 
} 

console.log(dataobj.id); 
console.log(dataobj['id']); 

两者的工作原理相同。

因此,对于您的示例,您可以按照您希望关联数组工作的方式访问该对象。

1

在JavaScript的任何目的是所有目的关联数组

例如你可以做

dataArray = obj[0]; 
for(var prop in dataArray) { 
    if(dataArray.hasOwnProperty(prop)){ 
     console.log(dataArray[prop]; 
    } 
} 

这将打印每个对象的值到控制台。调用hasOwnProperty在你的情况下并不是真的需要,因为你得到的对象是由于它的原型而产生的,但是它通常比在迭代对象的属性时检查它是属于它自己的对象还是属于某个对象的某个对象原型链

对于几乎(1)对象的任何属性有2点语义等同放着清单的方式来访问该值

obj.propertyName 
obj["propertyName"] 

都将产生相同的值。 (1) 当属性名称不是有效的标识符。即你可以做

obj["property name"] 

但不能做

obj.property name 

换句话说,属性名称不必须是有效的标识符。

+0

您是否打算在'obj。[“propertyName”]'中放置一个点?关于下线和MildlySerious的回答,看起来并不正确! – 2014-05-18 15:27:01

+0

@JamesCameron Nope这是从做F#编程剩下的我猜。感谢您的发现:) – 2014-05-18 18:41:45

0

使用.map()

for (var i in elements) 
{ 
    elements[i] = $.map(elements[i],function(v) 
    { 
     return v; 
    }); 
}  
0

可能是你想要的东西是这样的:

var idArray = []; 
var buildArray = []; 
var _idArray = []; 
var data = [{ 
       "id": 159, 
       "pavadinimas": "Building A", 
       "_id": 100 
      }, { 
       "id": 160, 
       "pavadinimas": "Building B", 
       "_id": 200 
      }, { 
       "id": 161, 
       "pavadinimas": "Building C", 
       "_id": 400 
      }]; 

$.each(data, function (i, item) { 
    idArray.push(item.id); 
    buildArray.push(item.pavadinimas); 
    _idArray.push(item._id); 
}); 

console.log(idArray[0]+' : '+buildArray[0]+ ' : ' +_idArray[0]);