【问题标题】:Convert dynamic string to JSON using javascript使用 javascript 将动态字符串转换为 JSON
【发布时间】:2018-06-27 08:40:32
【问题描述】:

我正在使用 API,它的响应包含动态字符串数组,如下所示:

var arr = ["Request.name","Request.name.first","Request.name.first.last"]; //response 3

所以我想将它动态转换为 JSON 对象数组,如下所示:

var arrayOfObjects = [ 
               { 
                 "Request": {
                 "name":val 
                 }
               } //converted from arr[0]
            ,{ 
                 "Request": {
                  "name":{
                   "first":val
                  }
                 }
              } //converted from arr[1] 
            ,{ 
                 "Request": {
                  "name":{
                   "first":{
                     "last":val
                   }
                  }
                 }
               } //converted from arr[2] 
        ];

等等……

这可能吗?

【问题讨论】:

  • 可能,您自己尝试过吗?如果您需要调试帮助,请发布您尝试过的代码
  • val的值是多少?
  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只会在发布者已经尝试自己解决问题时提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • @LeonidPyrlia 所有对象的常量值。它可能是 0。

标签: javascript arrays json string casting


【解决方案1】:

您可以创建一个函数,将点分隔的字符串转换为相应的深度嵌套对象,然后将输入的字符串数组映射到它。我的解决方案是迭代的,尽管我认为它也可以递归地完成。

var arr = ["Request.name","Request.name.first","Request.name.first.last"];

function createObjFromStr(str) {

    return str.split('.').reduceRight((all, key, i, arr) => {

        if (i === arr.length - 1) {
            all = {[key]: 0};
        } else {
            all[key] = Object.assign({}, all);
            Object.keys(all).forEach(k => {
                if (k !== key) delete all[k];
            });
        }

        return all;

    }, {});

}

const arrayOfObjects = arr.map(createObjFromStr);

console.log(arrayOfObjects);

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2020-09-20
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多