【问题标题】:Javascript Json object to object with keys of dotted strings [closed]Javascript Json对象到带有点字符串键的对象[关闭]
【发布时间】:2019-01-30 06:30:30
【问题描述】:

我需要解析Json响应

{
   "product": "office",
   "info": 
   {
      "brand": 
      [
        "1brand"
      ],
      "detail": 
      {
        "number": 
        {
            "min": 1,
            "max": 5
         },
       }
   }
};

用虚线键来对象

{
    "product" : "office",
    "info.brand" : ["1brand"],
    "info.detail.number.min" : 1,
    "info.detail.number.max" : 5
}

嵌套和相邻对象的数量未知。解决方案应该是带有一个参数的函数 - 响应对象并返回新对象(带点字符串键)。

【问题讨论】:

  • 那么你尝试了什么呢?
  • solution should be... 你什么都没尝试,看来你是在命令我们提供代码。和 -1 。
  • 我用 Object.key 尝试了一些算法,并找到了一些具有更多参数的解决方案,但似乎没有什么适合我的问题。 @BhojendraRauniyar

标签: javascript json parsing object


【解决方案1】:

您可以对嵌套对象的每一层采用递归方法并收集键并将它们用于新对象中最后找到的值。

function flatKeys(object) {

    function iter(part, keys) {
        Object.keys(part).forEach(function (k) {
            var allKeys = keys.concat(k);
            if (part[k] && !Array.isArray(part[k]) && typeof part[k] === 'object') {
                return iter(part[k], allKeys);
            }
            flat[allKeys.join('.')] = part[k];
        });
    }

    var flat = {};
    iter(object, []);
    return flat;
}

var object = { product: "office", info: { brand: ["1brand"], detail: { number: { min: 1, max: 5 } } } };

console.log(flatKeys(object));

【讨论】:

  • 哦,这是一个很好的解决方案。我用 Object.key 尝试了几乎所有东西,但我无法构建正确的递归算法。谢谢
【解决方案2】:

您可以使用reduce 方法创建递归函数。

let data = {"product":"office","info":{"brand":["1brand"],"detail":{"number":{"min":1,"max":5}}}}

function parse(input, res = {}, prev = '') {
  return Object.keys(input).reduce((r, e) => {
    let key = prev + (prev && '.') + e, val = input[e]
    if (typeof val == "object" && !Array.isArray(val)) parse(val, res, key)
    else r[key] = input[e]
    return r;
  }, res)
}

let result = parse(data)
console.log(result)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2021-03-24
    • 2012-03-25
    • 2015-05-23
    • 1970-01-01
    • 2016-03-16
    相关资源
    最近更新 更多