javascript - 在javascript中解析Json并获取键/值的最佳方法

标签 javascript arrays json node.js

我正在尝试解析下面的 JSON(格式),将其展平并获取所需的键/值(输出),如下所述。我正在尝试找出最好的方法来做到这一点。

我需要获取displayName及其对应的父级

例如: 特征:taxoFeatures

输入:

 {
          "Shop": {
            "subFilter": [
              {
                "taxoFeatures": {
                  "displayName": "Features"
                }
              },
              {
                "color_base": {
                  "displayName": "Colour"
                }
              }
            ],
            "displayName": "Shopping"
          },
          "Support": {
            "subFilter": [
              {
                "contentType": {
                  "displayName": "Content"
                }
              }
            ],
            "displayName": "Support documents"
          }
        }

预期输出:

    {
        "Shopping": "Shop",
        "Features":"taxoFeatures",
        "Colour":"color_base",
        "Content":"contentType",
        "Support documents":"Support"
        }

我正在考虑循环遍历 JSON 并找到键并添加相应的键和 displayName 值(然后循环遍历每个子数组并存储这些值)。还有其他想法吗?

     let customName = {};
    for (const key in filter) {
            if (filter.hasOwnProperty(key)) {
                const value = filter[key];
                 if (isNotEmpty(value.displayName)) {
                    customName[value.displayName] = key;
                }
            }
        }

最佳答案

您可以使用此递归函数,该函数使用 reduceObject.assign 构建结果对象:

function transform(filter) {
    return Object.keys(filter).reduce( (acc, key) => {
        const value = filter[key];
        if (Object(value) === value) { // it's an object
            if ('displayName' in value) {
                acc[value.displayName] = key;
            }
            Object.assign(acc, transform(value)); // recurse
        }
        return acc;
    }, {});
}

// Sample input
const filter = {
  "Shop": {
    "subFilter": [
      {
        "taxoFeatures": {
          "displayName": "Features"
        }
      },
      {
        "color_base": {
          "displayName": "Colour"
        }
      }
    ],
    "displayName": "Shopping"
  },
  "Support": {
    "subFilter": [
      {
        "contentType": {
          "displayName": "Content"
        }
      }
    ],
    "displayName": "Support documents"
  }
}

console.log(transform(filter));

关于javascript - 在javascript中解析Json并获取键/值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42936545/

相关文章:

javascript - 这个范围随着继承而丢失

java - 用于创建名称递增的对象的数组

java - 如何防止 Java 的 Mongo 驱动程序转义查询中的引号

javascript - 显示 Json 数据 jQuery PHP MySQL

javascript - 在 Oracle APEX v4.2 中处理 JSON 数据

javascript - 如何禁用单击时隐藏输入

javascript - 如何在 WebBrowser 控件中捕获 POST 的结果?

c - 检测数组中的数是否已经输入(C程序)

php - 从 iOS 获取我的 JSON 以发布到我的 php 文件并插入到 mySQL 时遇到问题

javascript - 如何修改使用 React Router 作为 props 发送的路由参数?