javascript从数组创建嵌套JSON数组
我有这个数组:javascript从数组创建嵌套JSON数组,javascript,arrays,json,nested,Javascript,Arrays,Json,Nested,我有这个数组: myArray=[“Id=1”、“时间=18:40”、“主题=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 我想从中创建一个嵌套的JSON数组: myJson = [ { "Id" : "1", "Time" : "18:40", "Topic"
myArray=[“Id=1”、“时间=18:40”、“主题=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 我想从中创建一个嵌套的JSON数组:
myJson = [
{
"Id" : "1",
"Time" : "18:40",
"Topic" : "yyyyyyyyyyyy",
"GUEST":
[
{"Role" : "HS",
"Infos" : "Arizona"},
{"Role" : "GS",
"Infos" : "Arizona"},
{"Role" : "HS",
"Infos" : "Colorado"}
]
},
{
"Id" : "2",
"Time" : "11:32",
"Topic" : "xoxo",
"GUEST":
[
{"Role" : "GS",
"Infos" : "California"},
{"Role" : "CS",
"Infos" : "Maryland"},
{"Role" : "GS",
"Infos" : "Nevada"}
]
}
]
我怎么做?尝试下面的代码但未成功
myArray=[“Id=1”、“Time=18:40”、“Topic=yyyyyyyyyy”、“GUEST”、“Role=HS”、“Infos=亚利桑那”、“Role=GS”、“Infos=亚利桑那”、“Role=GS”、“Infos=科罗拉多”、“Id=2”、“Time=11:32”、“Topic=xoxo”、“GUEST”、“Role”=“GS”、“Infos=California”、“Role=CS”、“Infos=Maryland”、“Role=GS”、“Infos=Nevada”];
//声明新对象
设obj={};
//用于记住对象当前级别的位置
让水平;
myJson=[];
for(此.myArray的let项){
//如果它包含一个等于
如果(项包括('=')){
//把它分成两刺
让split=item.split('=');
let key=split[0]。trim();
设val=split[1]。trim();
//如果我们已经在一个较低的层次,比如说,把它放在那里
如果(级别){
obj[级别][键]=val
}否则{
//或者只是将新数据放在顶层
obj[key]=val
}
}否则{
//如果没有平等的人,我们就要下一层楼
级别=项目;
myJson.push(obj[item]);
}
}
log(“myJson:+JSON.stringify(myJson))代码>JSON的格式错误
JSON中不允许使用键值对数组
键值对数组不能具有相同的键名
更改为以下格式(JSON对格式有严格要求):
myJson=[
{
“Id”:“1”,
“时间”:“18:40”,
“主题”:“yyyyyyyyyyyy”,
“客人”:
[
{
“角色”:“HS”,
“信息”:“亚利桑那州”
},
{
“角色”:“GS”,
“信息”:“亚利桑那州”
},
{
“角色”:“HS”,
“信息”:“科罗拉多”
}
]
}
]
另一个答案完全正确-您请求的格式完全错误。如果当您遇到“来宾”字符串时,它只会深入一个对象,而当您遇到下一个“Id=\d+”
字符串时,它会在输出中创建新对象,那么您可以使用如下内容:
let process = (arr) => {
let path = [];
const data = [];
let o = data;
while (arr && arr.length) {
let item = arr.shift();
let key= null;
let value = null;
if (/Id = \d+/.test(item)) {
o = {};
data.push(o);
let pair = item.split(' = ');
o.Id = pair[1];
}
else if (item == "GUEST") {
o["GUEST"] = {};
o = o["GUEST"]
value = {};
} else {
let pair = item.split(' = ');
o[pair[0]] = pair[1];
}
}
return data;
}
但是,使用这种方法,您的重复密钥将被覆盖,如下所示:
[
{
"Id": "1",
"Time": "18:40",
"Topic": "yyyyyyyyyyyy",
"GUEST": {
"Role": "GS",
"Infos": "Colorado"
}
},
{
"Id": "2",
"Time": "11:32",
"Topic": "xoxo",
"GUEST": {
"Role": "GS",
"Infos": "Nevada"
}
}
]
我认为这是一个良好的开端,您可以根据自己的喜好微调解析来宾部分这是一个json数组。我试着更新帖子,但它不让我更新,而是:`“来宾”:`[{“角色”:“HS”,“信息服务”:“亚利桑那州”},{“角色”:“GS”,“信息服务”:“亚利桑那州”},{“角色”:“HS”,“信息服务”:“科罗拉多州”},`这就是它应该看起来的样子。好的,谢谢。您的重复密钥将被覆盖。这是有用的信息。我知道为什么我的代码似乎不起作用,因为我刚刚得到最后一个JSON来宾。感谢您的解释。这并没有远程回答这个问题-OP是问如何转换他的数据(使用Javascript代码),而不是关于他的输出应该是什么样子的建议。如果您在回答OP的问题之前需要OP对要求进行澄清,请在评论中提出,而不是在回答中提出。