javascript - 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)。
我该如何继续或重做?
谢谢!
解决方案
您可以为所有最后级别获取一个辅助数组,并从第一个元素中选择结果。
这是有效的,因为您在拆分空字符串后将其作为标志,以获取最后一个数组以插入新对象。
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; }
推荐阅读
- reactjs - ReactJS:从父组件中的子触发事件
- php - laravel vue SPA页面在ajax请求上返回HTML而不是json值
- react-native - 密码验证器不适用于本机反应
- r - 使用dplyr时如何在涉及基本R函数的赋值运算符的RHS中使用UQ?
- python - 如何在 Flask 微框架中创建单例对象
- python - 迁移前使用模型信息
- machine-learning - 检测连续输入的数值数据中的峰值
- java - 从数据库中检索文本文件时如何在 Spring Framework 中下载文本文件?
- c# - 使用 C# VB.NET 编译器构造中的符号表
- css - CSS 非标准“ZOOM”属性