首页 > 解决方案 > JavaScript:使用一些规则将字符串转换为 json

问题描述

我需要编写一个可以将以下数据(输入字符串)转换为 json 的函数。

数据:

AA,BB
,CC
,,DD
,EE

JSON:

{
  "AA": [
    {
      "BB": []
    },
    {
      "CC": [
        {
          "DD": []
        }
      ]
    },
    {
      "EE": []
    }
  ]
}

AA, BB, CC ...可以是任何字符串,数据作为字符串输入。

我写了一部分函数(见下面的代码),没有更多的好主意。

function str2json(str) {
  var lines = str.split("\n");
  var arr = new Array();
  for (let i = 0; i < lines.length; i++)
  {
    var objs = lines[i].split(",");
    arr.push(objs);
  }
  for (let i=0; i < arr.length; i++)
  {
    for (let j=0; j < arr[i].length; j++)
    {
      if(arr[i][j].length === 0)
      {
        arr[i][j] = arr[i-1][j];
      }
      else
      {
        break;
      }
    }
  }
  // TODO
}

我只是将数据转换为数组,然后将正确的数据添加到 null,结果是:

AA,BB
AA,CC
AA,CC,EE
AA,FF 

然后我想到了使用循环创建一个对象,然后使用 JSON.stringify(object)。

我该如何继续或重做?

谢谢!

标签: javascriptarraysjson

解决方案


您可以为所有最后级别获取一个辅助数组,并从第一个元素中选择结果。

这是有效的,因为您在拆分空字符串后将其作为标志,以获取最后一个数组以插入新对象。

var data = 'AA,BB\n,CC\n,,DD\n,EE',
    result = [],
    levels = [result];

data
    .split('\n')
    .forEach(s => s
        .split(',')
        .forEach((v, i) => {
            if (!v) return;
            levels[i].push({ [v]: (levels[i + 1] = []) });
        })
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读