Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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数组_Javascript_Arrays_Json_Parsing_Nested - Fatal编程技术网

在JavaScript中动态解析JSON数组

在JavaScript中动态解析JSON数组,javascript,arrays,json,parsing,nested,Javascript,Arrays,Json,Parsing,Nested,我正试图在discord.js(v12)中用JavaScript解析本地存储在我机器上的JSON文件。此JSON有几个键和值: { “姓名”:“罗伯特”, “等级”:“所有者”, “爱好”:[{ “id”:1, “名称”:“游戏” }, { “id”:2, “姓名”:“听音乐” }, { “id”:3, “名称”:“振动” }, { “id”:4, “名称”:“沿公路行驶” }], “角色”:[{ “id”:1, “姓名”:“创始人” }, { “id”:2, “名称”:“高级会员” }] }

我正试图在discord.js(v12)中用JavaScript解析本地存储在我机器上的JSON文件。此JSON有几个键和值:

{
“姓名”:“罗伯特”,
“等级”:“所有者”,
“爱好”:[{
“id”:1,
“名称”:“游戏”
}, {
“id”:2,
“姓名”:“听音乐”
}, {
“id”:3,
“名称”:“振动”
}, {
“id”:4,
“名称”:“沿公路行驶”
}],
“角色”:[{
“id”:1,
“姓名”:“创始人”
}, {
“id”:2,
“名称”:“高级会员”
}]
}
我想在Discord上发送上述信息,如下所示:

name: Robert
rank: Owner
hobbies: gaming, listening to music, vibing, driving down the highway
roles: Founder, Premium Member
我也希望这是动态的。这意味着,如果在当前集合中添加了新的键和值,则我的代码应该进行调整

使用当前代码,这是我的结果:

name: Robert
rank: Owner
hobbies: gaming, listening to music, vibing, driving down the highway
这是我当前的代码:

let noted=``
var raw=fs.readFileSync(名称)
var obj=JSON.parse(原始)
用于(obj中的var项目){
if(对象的obj[项目]实例){
用于(对象爱好中的变量i){
注意+=`${obj.cabiods[i].name}`
}
}否则{
注意到+=`${item}:${obj[item]}\n`
注意+=`爱好:`
}
}
message.channel.send(注意)
变量
name
const name=require(“./names.json”)位于代码顶部

此代码适用于
名称
等级
爱好

角色
必须在for循环中手动检查,才能使其可见。我的目标是自动检测添加的任何新密钥,并将其添加到
noted
变量中


我曾经看到过使用
map()
做过类似的事情,但我尝试过,没有取得任何效果。这也是一个相当草率的代码,但我对保持代码整洁不感兴趣。

您可以使用和执行以下操作:

const obj={“name”:“Robert”,“rank”:“Owner”,“业余爱好”:[{“id”:1,“name”:“gaming”},{“id”:2,“name”:“listing music”},{“id”:3,“name”:“vibing”},{“id”:4,“name”:“driving down the highway”}],“roles”:[{“id”:1,“name”:“Founder”},{“id”:2,“name”:“Premium Member”};
注释常量=对象条目(obj)
.map([key,val])=>
`${key}:${
数组的val实例?val.map(x=>x.name).join(','):val
}`)
.join('\n');

控制台日志(注)这里是一个使用的迭代解决方案

我发现它更容易阅读,但最重要的是,它非常灵活,可以让您遍历哪些关键点

//const objectScan=require('object-scan');
const myData={name:'Robert',rank:'Owner',嗜好:[{id:1,name:'gaming'},{id:2,name:'Listing music'},{id:3,name:'vibing'},{id:4,name:'driving down the highway'}],角色:[{id:1,name:'Founder'},{id:2,name:'Premium Member'};
const convert=(数据)=>{
常量r=objectScan(['*','*[*].name']{
反面:错,
filterFn:({isLeaf,context,key,value})=>{
如果(isLeaf){
如果(!(上下文中的[0]键)){
上下文[键[0]]=值;
}否则{
上下文[键[0]]+=`,${value}`;
}
}
}
})(数据,{});
返回Object.entries(r.map)([k,v])=>`${k}:${v}`)。join('\n');
};
console.log(convert(myData));
/* =>
姓名:罗伯特
职级:所有者
爱好:玩游戏,听音乐,振动,在高速公路上开车
角色:创始人、高级会员
*/
。作为控制台包装{最大高度:100%!重要;顶部:0}