使用关键排除列表展平 json

2023-12-26

我需要展平 json,但想要考虑一个排除键数组列表,该列表不会被处理/添加到列表中

例如

如果我有exclusion_keys_array = [“addresses.metadata”,“pageToken”] //仅跳过地址的元数据(二级跳过)

如果我有一个exclusion_keys_array = [“metadata”,“pageToken”] //父级json的元数据将被跳过(顶级键跳过)

如何使用排除数组展平 JSON?

代码来源:从 JSON 动态生成具有不同列的二维数组 https://stackoverflow.com/questions/68846046/dynamically-generate-a-2d-array-from-json-with-varying-columns

var exlusion_list = ["metadata", "meta", "pageToken"];

var crowds = [{
  "name": [{
    "firstName": "John",
    "middleName": "Joseph",
    "lastName": "Briggs",
  }],
  "addresses": [{
    "type": "home",
    "poBox": "111",
    "city": "City1",
    "postalCode": "1ER001",
    "country": "USA",
  }, {
    "type": "work",
    "poBox": "222",
    "city": "City2",
    "region": "Region2",
    "postalCode": "1ER002",
  }],
  "photos": [{
    "url": "photo.org/person1",
    "default": true,
  }, {
    "url": "imagur.org/person1",
    "default": true,
  }],
  "metadata": [{
    "meta-id": "1234",
  }],
}, {
  "name": [{
    "firstName": "Bill",
    "lastName": "Thatcher",
  }],
  "addresses": [{
    "type": "home",
    "city": "City3",
    "region": "Region3",
    "postalCode": "1ER003",
    "country": "USA",
  }, {
    "type": "work",
    "poBox": "444",
    "region": "Region4",
    "postalCode": "1ER004",
  }, {
    "poBox": "555",
    "region": "Region5",
    "postalCode": "1ER005",
  }],
  "metadata": [{
    "meta-id": "1234",
  }],
}];

function flatten(obj, res = {}, key = '') {
  let add = (d, s) => key ? key + d + s : s;

  if (Array.isArray(obj)) {
    obj.forEach((v, n) => flatten(v, res, add(' #', n + 1)));
  } else if (typeof obj === 'object') {
    Object.entries(obj).forEach(([k, v]) => flatten(v, res, add(': ', k)));
  } else {
    res[key] = obj;
  }
  return res;
}
let flats = crowds.map(obj => flatten(obj));

function combineKeys(objs) {
  let keys = objs.reduce((k, obj) => k.concat(Object.keys(obj)), []);
  return [...new Set(keys)];
}
let keys = combineKeys(flats);

let table = flats.map(f => keys.map(k => f[k] ?? ''));

table.unshift(keys);

console.log({ table });
// document.write(JSON.stringify(table));
.as-console-wrapper { min-height: 100%!important; top: 0; }
// .as-console-wrapper { min-height: 70%!important; bottom: 0; }

一个快速修复方法是过滤键,如下所示。我认为有一种更有效的方法来做到这一点,但我没有太深入地研究代码。

let keys = combineKeys(flats).filter(
  key => !exlusion_list.includes(key.split(":")[0].split(" ")[0])
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用关键排除列表展平 json 的相关文章

  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 标准转换:数组到指针的转换

    这是ISO的观点 标准转换 数组到指针的转换 4 2 1 数组 类型的左值或右值 N T 或 未知边界的数组 T 可以转换为右值 类型为 指向 T 的指针 结果是 指向第一个元素的指针 数组 如果可能的话 任何人都可以用一个示例程序来解释这
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 3D 数组到 3D std::vector

    我在代码函数中用 3D std vector 替换了 3D 数组 它进入了无限循环 你能给我一个提示吗 我真的需要使用向量而不是数组 谢谢 我最初的代码是 arr is a 3D array of a sudoku table the 3
  • 通过 JavaScript 获取表单名称

    我有一个简单的问题 但我在网上找不到好的解决方案 我有这个 HTML 代码
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 如何获得n个具有不同元素数量的数组的所有可能组合?

    我有一些在编程时未知的数组数量 也许是 3 或 4 或 7 每个数组都有一些元素 即 a 1 2 3 4 b 6 7 5 2 1 c 22 4 6 8 4 8 5 4 d e f g 我想通过从每个数组中采样一个数字来获得所有可能的组合 例
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • 如何从 json 文件创建模型? (ExtJS)

    这是我想使用 json 文件创建的模型 Ext define Users extend Ext data Model fields name user id type int name user name type string 为了根据服
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐