我收到了这些测试输入,需要将其解析为一个 JSON 对象,该对象由以下划线分隔的键组织。
var testInput1 = '{"Data_Structure_Test1": "Test1 Data"}';
var testInput2 = '{"Data_Structure_Test2": "Test2 Data"}';
var testInput3 = '{"Data_Structure_Test3": "Test3 Data"}';
var testInput4 = '{"Data_AnotherStructure": "AnotherStructure Data"}';
var testInput5 = '{"Data_JustAnother": "JustAnother Data"}';
var testInput6 = '{"NewData_NewTest": "NewTest Data"}';
所以上面的testInputs
应该吐出:
{
"Data": {
"Structure": {
"Test1": "Test1 Data",
"Test2": "Test2 Data",
"Test3": "Test3 Data"
},
"AnotherStructure": "AnotherStructure Data",
"JustAnother": "JustAnother Data"
},
"NewData": {
"NewTest": "NewTest Data"
}
}
我似乎无法将 JSON 对象收集到正确的容器中。
Here is a JSFiddle that I have been using to test with
这是我调用来解析字符串的函数
function parse_input(aInput) {
let jObj = JSON.parse(aInput);
for (let key in jObj) {
let objKeys = key.split("_");
for (i = 0; i < objKeys.length; i++) {
if (data.hasOwnProperty(objKeys[i])) {
data[key] = jObj[key];
} else {
data[objKeys[i]] = jObj[key];
}
}
以及我如何传递输入:
var data = {};
parse_input(testInput1);
parse_input(testInput2);
parse_input(testInput3);
parse_input(testInput4);
parse_input(testInput5);
parse_input(testInput6);
var result = JSON.stringify(data, undefined, '\t');
谁能看出我做错了什么?
我确实可以访问 jQuery
框架,如果这会使这更容易的话。
最佳答案
function parse_input(json){
const obj = JSON.parse(json);
for(const key in obj){
const keys = key.split("_");
keys.slice(0,-1).reduce(function(obj, key){
return obj[key] || (obj[key] = {});
}, data)[keys.pop()] = obj[key];
}
}
您可能希望使用reduce 深入数据对象。
关于javascript - 从复杂字符串数组创建 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47638567/