javascript - 从复杂字符串数组创建 JSON 对象

标签 javascript jquery json

我收到了这些测试输入,需要将其解析为一个 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/

相关文章:

javascript - 带去抖功能的 useEffect

Javascript click事件触发两次

javascript - For 循环对于 click() 方法无法正常工作

jquery - 如何引用两个不同的标签?使用工具提示!

javascript - Bootstrap 切换折叠未知 id

javascript - 使用循环删除 JSON 中的重复值

javascript - 在JS中插入CSS链接标签时阻止页面渲染

javascript - 类型 'true' 的参数不可分配给类型的参数

java - 转换时出现异常 "JSONArray cannot be converted to JSONObject error"

ruby-on-rails - 在 Rails 中为 Twitter API 解析 JSON 的最佳方式