无法从javascript对象生成JSON文本
我想将从服务器接收的这个对象转换为JSON文件,以便在d3.js图表中使用它:无法从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", "
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(输入)呢