Javascript 将JSON转换为关联数组

Javascript 将JSON转换为关联数组,javascript,arrays,json,Javascript,Arrays,Json,我想将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" },

我想将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];
            }
        });     

    }
请帮忙。谢谢

我只想按键对它进行分组,就像我在预期输出中所做的那样

似乎您想要创建一个
id->object
map。为此,您只需迭代数组,将每个对象的
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);

您想要的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));
var a=[];
var o={};

对于(var i=0,l=response.length;iThat part
rData=[100:…
已经无效。为什么要将每个值都放在一个数组中?这使得访问数据变得非常困难。JavaScript没有关联数组,但可以使用对象作为
key->value
map。现有的数据结构有什么问题,即JSON的结构方式有什么问题吗你只想创建一个映射
id->object
?请解释你实际试图解决的问题。@FelixKling好的,我只想按照预期输出中的键对它进行分组。虽然不一定相同。我有困难,尤其是在内部部分“证书”上。我还想指出,您的问题似乎与JSON无关。您正在处理的值,
obj.response
,是一个JavaScript数组。您是如何获得数据的(即JSON)与您试图做的事情无关。@FelixKling我在这里把事情弄复杂了,在这里我可以直接使用
obj.response
而不是将其转换为数组。我会做一些实验,稍后会接受答案。谢谢您的帮助。是的,如果您不需要
id->object
映射,直接使用sing
obj.response
当然是最简单的方法。您看过
console.log(JSON.stringify(a));
的输出吗?是的,我知道这不是OP要求的,但这是我的观点。o的输出也不是。
{
    "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" 
    }
}
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));