我想将JSON响应转换为关联数组,但看起来我无法做到正确。
这是我的JSON示例响应:
{
"response":[
{
"id":100,
"certificate":{
"id":1,
"title":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."
},
"created_at":"2013-12-02T15:20:08.233Z"
},
{
"id":101,
"certificate":{
"id":2,
"title":"Aenean facilisis, nisl vitae pulvinar varius."
},
"created_at":"2013-12-02T15:20:08.240Z"
}
],
"count":2
}
这是我到目前为止所尝试的:
var len = obj.response.length;
var rData = [];
var gcData = [];
for(var i = 0; i < len; i++){
rData[i] = $.map(obj.response[i], function(value, index) {
if(typeof value=="object"){
gcData = $.map(value, function(value1, index) {
return [value1];
});
return gcData;
}else{
return [value];
}
});
}
我的预期输出:
rData = [
100 : [
id: ["100"],
certificate: [
id: ["1"],
title: ["Lorem ipsum dolor sit amet, consectetur adipiscing elit."]
],
created_at: ["2013-12-02T15:20:08.240Z"]
]
101 : [
id: ["101"],
certificate: [
id: ["2"],
title: ["Aenean facilisis, nisl vitae pulvinar varius."]
],
created_at: ["2013-12-02T15:20:08.240Z"]
]
]
请帮忙。感谢。
答案 0 :(得分:4)
我只是想按照我预期的输出
之类的键对它进行分组
您似乎想要创建id -> object
地图。为此,您只需迭代数组,将每个对象的id
属性作为属性名称,并将对象(数组的元素)分配给地图的该属性。
示例:
var map = {};
var response = obj.response;
for (var i = 0, l = response.length; i < l; i++) {
map[response[i].id] = response[i];
}
console.log(map);
数组中的每个对象都已经存在于您希望的结构中。输出是
{
"100": {
"id": 100,
"certificate": {
"id": 1,
"title": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
},
"created_at": "2013-12-02T15:20:08.233Z"
},
"101": {
"id": 101,
"certificate": {
"id": 2,
"title": "Aenean facilisis, nisl vitae pulvinar varius."
},
"created_at": "2013-12-02T15:20:08.240Z"
}
}
答案 1 :(得分:0)
您所需的JSON不正确。
目前尚不清楚是否要创建数组数组或数组对象或什么。要帮助确定哪个选项符合您的需求,请尝试使用此代码
var a=[];
var o={};
for (var i=0, l=response.length; i<l; i++) {
var e = response[i];
a[e.id] = e.certificate;
o[e.id] = e.certificate;
}
console.log(JSON.stringify(a));
console.log(JSON.stringify(o));