Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从JSON数组转换为JSON对象_Javascript_Json - Fatal编程技术网

Javascript 如何从JSON数组转换为JSON对象

Javascript 如何从JSON数组转换为JSON对象,javascript,json,Javascript,Json,我从一个web服务调用中得到了这个JSON: { "name": "My Name", "path": "my path", "id": "44", "type": "my type", "classes": "my classes" }, { "name": "his Name", "path": "his path", "id": "76", "type": "his type", "classes": "his

我从一个web服务调用中得到了这个JSON:

{
    "name": "My Name",
    "path": "my path",
    "id": "44",
    "type": "my type",
    "classes": "my classes"
},
{
    "name": "his Name",
    "path": "his path",
    "id": "76",
    "type": "his type",
    "classes": "his classes"
}
然后我需要把它转换成这种格式

{
    "44" : { "name" : "My Name", "path" : "my path" },
    "76" : { "name" : "his Name", "path" : "his path" }
}
我最初天真的尝试是:

var myData = [];
for (var i = 0; i < rawData.length; i++) {
myData.push({
    rawData[i].id :
    {
        "path": rawData[i].path,
        "name": rawData[i].name
    }
});
var myData=[];
对于(var i=0;i
由于语法错误而失败,因此我最终得出以下结论:

var myData = [];
for (var i = 0; i < rawData.length; i++) {
myData.push(rawData[i].id,
{
    "path": rawData[i].path,
    "name": rawData[i].name
});
var myData=[];
对于(var i=0;i

我的数组是填充的,但问题是我的
myData
数组没有对象的“44”和“76”部分,只有
{“name”:“path”:“}
部分。我想这是因为我不了解JSON和javscript对象的工作原理。

您需要将id转换为字符串吗

var myData = {};
for (var i = 0; i < rawData.length; i++) {
    myData[String(rawData[i].id)] = {
        "path": rawData[i].path,
        "name": rawData[i].name
    };
}
var myData={};
对于(var i=0;i
不要使用
Array.prototype.push()
,使用方括号表示法并将输出定义为对象而不是数组

var myData = {};
for (var i = 0; i < rawData.length; i++) {
    myData[rawData[i].id] = {
        "path": rawData[i].path,    
        "name": rawData[i].name
    }
}
var myData={};
对于(var i=0;i
您所需的输出不是数组,因此这是您的起点。您所说的输出是对象,而不是数组

var myData = {};
for (var i = 0; i < rawData.length; i++) {
    myData[rawData[i].id] = {
        "path": rawData[i].path,    
        "name": rawData[i].name
    }
}
通过创建一个空白对象,然后使用
id
作为键向其中添加对象,可以生成结果:

var myData = {};
rawData.forEach(function(entry) {
    myData[entry.id] = {
        name: entry.name,
        path: entry.path
    };
});
或者,如果您不想使用
forEach
(它是ES5,但可以为较旧的浏览器添加垫片),老式的方式:

var myData = {};
var index, entry;
for (index = 0; index < rawData.length; ++index) {
    entry = rawData[index];
    myData[entry.id] = {
        name: entry.name,
        path: entry.path
    };
}
var myData={};
var指数,分录;
对于(索引=0;索引
其他海报的变体:

// Create a new empty object.
var out = {};

// Loop over your array of objects
// Add the each object id as a key to the output object, and the object as the value.
for (var i = 0, l = arr.length; i <l; i++) {
  var obj = arr[i];
  out[obj.id] = obj;

  // Delete the properties from the newly added object you don't want.
  delete obj.id;
  delete obj.type;
  delete obj.classes;
}
//创建一个新的空对象。
var out={};
//在对象数组上循环
//将每个对象id作为键添加到输出对象,并将对象作为值。

对于(var i=0,l=arr.length;i),这与JSON无关。这些是数组和对象,而不是文本。“您需要将id转换为字符串吗?”不,它已经是字符串。如果不是,它将在您将其用作属性名时立即变为字符串(
[…]
表示法).正是我所缺少的,在从数组到对象进行跳跃后,它非常有意义。谢谢。