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对要求进行澄清,请在评论中提出,而不是在回答中提出。