首页 > 解决方案 > Javascript Json对象到带有虚线键的对象

问题描述

我需要解析 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
}

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

标签: javascriptjsonparsingobject

解决方案


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

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));


推荐阅读