首页 > 解决方案 > javascript 字符串数组到 json 对象

问题描述

我有这个数组:

data = [
    "Id = 2",
    "time = 10:59",
    "Topic = xxxxxxxxxxxxxxxx",
    "GUEST3",
    "Role = GS",
    "Infos = Connecticut",
    "GUEST4",
    "Role = HS",
    "Infos = Delaware",
    "GUEST5",
    "Role = CS",
    "Infos = Hawaii"
]   

我怎样才能使它成为这样的 JSON 对象:

data = [   
 {    
    Id : 2,  
    time : 10:5',
    Topic : xxxxxxxxxxxxxxxx,  
    GUEST3:
           {
             Role : GS,
             Infos : Connecticut,
           }
   GUEST4:
           {
            Role : HS,
            Infos : Delaware,  
   GUEST5:
           {
            Role : CS,
            Infos : Hawaii
           }
 }

标签: javascriptarraysjson

解决方案


这是一些可以做到的代码。

我已经对代码进行了注释,但基本要点是它将查看数组中的每个字符串,然后确定它是键和值还是对象的另一层。

const data = ["Id = 2", "time = 10:59", "Topic = xxxxxxxxxxxxxxxx", "GUEST3", "Role = GS", "Infos = Connecticut", "GUEST4", "Role = HS", "Infos = Delaware", "GUEST5", "Role = CS", "Infos = Hawaii"];

// Declaring new object
let obj = {};
// Place to remember current level of object
let level;

// For every bit of the array
for (let item of data) {
  // If it contains an equals
  if (item.includes('=')) {
    // Split it into two stings
    let split = item.split('=');
    let key = split[0].trim();
    let cont = split[1].trim();
    // If we're already on a lower level like GUEST3 put it in there
    if (level) {
      obj[level][key] = cont
    } else {
      // Or just place the new data at the top level
      obj[key] = cont
    }
  } else {
    // If there's no equals we want to go down a layer
    level = item;
    obj[item] = {};
  }
}

console.log(obj)

如果您难以理解正在发生的事情,我希望这会有所帮助,请随时发表评论。

编辑:

我将您必须做出的三个答案混合在一起,以做出更好的答案。

const data = ["Id = 2", "time = 10:59", "Topic = xxxxxxxxxxxxxxxx", "GUEST3", "Role = GS", "Infos = Connecticut", "GUEST4", "Role = HS", "Infos = Delaware", "GUEST5", "Role = CS", "Infos = Hawaii"]

let aO = o = {};
data.map(a => a.split(' = ')).forEach(e => {e.length > 1 ? aO[e[0]] = e[1] : aO = o[e] = {}});
console.log(o);


推荐阅读