无法从javascript对象生成JSON文本

无法从javascript对象生成JSON文本,javascript,json,Javascript,Json,我想将从服务器接收的这个对象转换为JSON文件,以便在d3.js图表中使用它: data = { "dog ":"5", "cat ":"4", "fish ":"12", } 输出应为: { "name" : "animal", "children" : [ {"name":"dog", "value": 5}, {"name":"cat", "value": 4}, {"name":"fish", "

我想将从服务器接收的这个对象转换为JSON文件,以便在d3.js图表中使用它:

data = {
   "dog ":"5",
   "cat ":"4",
   "fish ":"12",
}
输出应为:

{    
    "name" : "animal",
    "children" : [
        {"name":"dog", "value": 5},
        {"name":"cat", "value": 4},
        {"name":"fish", "value": 10}
    ]
}
我想到的是:

   var jsonText = [] ;
   for ( key in data) {
  jsonText.push({name : key.trim(), value : parseInt(data[key])});
 }
但当我尝试打印对象时,我收到:

[object Object],[object Object],[object Object]

除此之外,我不知道如何向JSON文件添加其他属性。所以感谢你的提示

您可以使用
Object.keys(data)
并循环通过
获得所需的对象结构

var数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
};
var res={
名称:“动物”,
儿童:[]
};
Object.key(数据).forEach((key)=>{
res.children.push(
{name:key.trim(),value:parseInt(data[key])}
);
});

控制台日志(res)
您可以使用
Object.keys(data)
并循环通过
获得所需的对象结构

var数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
};
var res={
名称:“动物”,
儿童:[]
};
Object.key(数据).forEach((key)=>{
res.children.push(
{name:key.trim(),value:parseInt(data[key])}
);
});

控制台日志(res)假设您正在手动添加一个键,如
animal
,这应该可以工作,并且值应该是int

var数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
}
var children=Object.keys(数据).map((键)=>{
返回{
名称:key.trim(),
值:parseInt(数据[键])
}
})
让result=JSON.stringify({
名称:'动物',
儿童
})

控制台日志(结果)假设您正在手动添加一个键,如
animal
,这应该可以工作,并且值应该是int

var数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
}
var children=Object.keys(数据).map((键)=>{
返回{
名称:key.trim(),
值:parseInt(数据[键])
}
})
让result=JSON.stringify({
名称:'动物',
儿童
})
控制台日志(结果)
您就快到了(数组的格式正确),但是您需要得到的数组是对象的
子属性的值。使用
Object.entries
map
也会更容易一些,它们基于相同的元素将一个数组转换成另一个数组:

const数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
};
const children=Object.entries(数据)
.map(([name,value])=>({name:name.trim(),value:Number(value)}));
常量输出={name:'animal',children};
控制台日志(输出)
您就快到了(数组的格式正确),但是您需要得到的数组是对象的
子属性的值。使用
Object.entries
map
也会更容易一些,它们基于相同的元素将一个数组转换成另一个数组:

const数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
};
const children=Object.entries(数据)
.map(([name,value])=>({name:name.trim(),value:Number(value)}));
常量输出={name:'animal',children};

控制台日志(输出)
Try-
console.log(JSON.stringify(jsonText))
Try-
console.log(JSON.stringify(jsonText))
使用
子项创建一个对象,并将值推送到它

let数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
}
设newObj={
“名称”:“动物”,
“儿童”:[]
}
for(让关键点输入数据){
newObj.children.push({
名称:keys.trim(),
值:parseInt(数据[键],10)
});
}

console.log(newObj)
使用
子项创建一个对象
键并将值推送到该对象

let数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
}
设newObj={
“名称”:“动物”,
“儿童”:[]
}
for(让关键点输入数据){
newObj.children.push({
名称:keys.trim(),
值:parseInt(数据[键],10)
});
}

console.log(newObj)
您可以使用
for..in
迭代
数据
对象,并将
prop:value
对象配对到
子对象
数组中:

const数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
}
设obj={
名称:“动物”,
儿童:[]
}
用于(数据中的道具){
让动物={}
动物[prop.trim()]=编号(数据[prop])
对象儿童推(动物)
}

console.log(JSON.stringify(obj))
您只需在
中使用
for..对
数据
对象进行迭代,然后将
prop:value
对象配对到
子对象
数组中:

const数据={
“狗”:“5”,
“猫”:“4”,
“鱼”:“12”,
}
设obj={
名称:“动物”,
儿童:[]
}
用于(数据中的道具){
让动物={}
动物[prop.trim()]=编号(数据[prop])
对象儿童推(动物)
}

log(JSON.stringify(obj))
您可以这样做

    const data = {
       "dog ":"5",
       "cat ":"4",
       "fish ":"12",
    }

    Object.keys(data).reduce((obj, animal) => ({
      ...obj,
      children: [
          ...obj.children,
          {
              name: animal,
              value: data[animal]
          }
      ]
    }), {name: "animal", children: []})

    console.log(JSON.stringify(obj))

在我看来,这是获得所需结果的一种更干净的方法

您可以这样做

    const data = {
       "dog ":"5",
       "cat ":"4",
       "fish ":"12",
    }

    Object.keys(data).reduce((obj, animal) => ({
      ...obj,
      children: [
          ...obj.children,
          {
              name: animal,
              value: data[animal]
          }
      ]
    }), {name: "animal", children: []})

    console.log(JSON.stringify(obj))

在我看来,这是一种获得所需结果的更简洁的方法

console.log(JSON.stringify(object))
@CertainPerformance抱歉,我更正了输入错误。您从哪里获得
名称:动物
数据?我从你的代码片段中看到的数据从来没有告诉你这一点。@OscarGodson True。这是问题的一部分。我不知道如何从javascript对象将其添加到json中。我的意思是,“动物”这个词从何而来?
console.log(json.stringify(object))
@CertainPerformance抱歉,我更正了输入错误。您从哪里获得
名称:动物
数据?我从你的代码片段中看到的数据从来没有告诉你这一点。@OscarGodson True。这是问题的一部分。我不知道如何将它从javascript对象添加到json中。好吧,我的意思是,“动物”这个词从哪里来?很好!只需要将值设置为
int
。很好!只需要将值设置为
int
@Babr这个怎么样?@Babr这个怎么样?为什么不直接使用
for(输入)呢