关键词:
【中文标题】将嵌套的 JSON 对象展平并排序到 javascript 中的数组中【英文标题】:Flatten and sort a nested JSON object into an array in javascript 【发布时间】:2021-10-26 21:12:45 【问题描述】:我有一个类似的对象:
'2021':
'08':
'26': ['name': 'Bob', age: 34, 'name': 'Alice', age: 33],
'27': ['name': 'Jane', age: 21]
,
'09':
'03': ['name': 'John', age: 47, 'name': 'Sue', age: 36]
,
'2022':
'04':
'05': ['name': 'David', age: 26]
我想将此对象展平为按日期降序排列的<year, month, day, name, age>
对象数组,因此所需的输出为:
[
'year': '2022', 'month': '04', 'day': '05', 'name': 'David', age: 26,
'year': '2021', 'month': '09', 'day': '03', 'name': 'John', age: 47,
'year': '2021', 'month': '09', 'day': '03', 'name': 'Sue', age: 36,
'year': '2021', 'month': '08', 'day': '27', 'name': 'Jane', age: 21,
'year': '2021', 'month': '08', 'day': '26', 'name': 'Bob', age: 34,
'year': '2021', 'month': '08', 'day': '26', 'name': 'Alice', age: 33,
]
更新:
我按照Nina的逻辑,也拆分成2个部分,先扁平化成单深度数组,然后排序。扁平化部分我有一个“丑陋”的嵌套 for 循环,它也可以工作并使用完全相同的排序代码:
let output = []
for (const year in data)
for (const month in data[year])
for (const day in data[year][month])
for (const person of data[year][month][day])
const merged = Object.assign(
'year': year,
'month': month,
'day': day,
, person)
output.push(merged)
这不太灵活,我不确定如何判断性能差异,但我会接受 Nina 的有效答案。
【问题讨论】:
到目前为止你的想法是什么? 这看起来并不难。你有什么问题? 【参考方案1】:你可以把任务分成两部分,
-
通过递归从数据中获取平面数组,
按想要的键降序排序。
const
flat = (object, [key, ...keys], values = ) => Object
.entries(object)
.flatMap(([k, v]) =>
const right = ...values, [key]: k ;
return Array.isArray(v)
? v.map(o => ( ...right, ...o ))
: flat(v, keys, right);
),
keys = ['year', 'month', 'day'],
data = 2021: '08': 26: [ name: 'Bob', age: 34 , name: 'Alice', age: 33 ], 27: [ name: 'Jane', age: 21 ] , '09': '03': [ name: 'John', age: 47 , name: 'Sue', age: 36 ] , 2022: '04': '05': [ name: 'David', age: 26 ] ,
result = flat(data, keys)
.sort((a, b) =>
let r;
keys.some(k => r = b[k] - a[k]);
return r;
);
console.log(result);
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
展平/取消展平嵌套 JSON 对象的最快方法
】展平/取消展平嵌套JSON对象的最快方法【英文标题】:Fastestwaytoflatten/un-flattennestedJSONobjects【发布时间】:2013-10-0614:04:33【问题描述】:我将一些代码放在一起来展平和取消展平复杂/嵌套的JSON对象。它可以工作,但有点慢(触... 查看详情
如何展平多个嵌套的 json 并转换为数据框?
】如何展平多个嵌套的json并转换为数据框?【英文标题】:Howtoflattenmultiplenestedjsonandconverttodataframe?【发布时间】:2021-09-1910:40:39【问题描述】:我正在尝试将JSON(来自AirTable)转换为可用于进一步数据转换的数据帧。在将JSON转... 查看详情
Django REST Framework:将嵌套的 JSON 展平为许多对象
】DjangoRESTFramework:将嵌套的JSON展平为许多对象【英文标题】:DjangoRESTFramework:FlattennestedJSONtomanyobjects【发布时间】:2018-01-2601:53:09【问题描述】:我有这个带有父字段的子模型,我从API获取JSON(我无法控制它的格式)。models.py... 查看详情
展平嵌套的 JSON 对象
】展平嵌套的JSON对象【英文标题】:FlattennestedJSONobject【发布时间】:2021-10-1918:29:19【问题描述】:我有一个这样的json对象:constpeople=name:\'MyName\',cities:[city:\'London\',country:\'UK\',city:\'Mumbai\',country:\'IN\',city:\'NewYork\',country:\'US\'],我 查看详情
如何在传递给@csv过滤器之前用嵌套结构展平JSON
】如何在传递给@csv过滤器之前用嵌套结构展平JSON【英文标题】:HowtoflattenJSONwithnestedstructurebeforepassingto@csvfilter【发布时间】:2016-10-0106:55:15【问题描述】:我正在尝试解析一些作为AWSCLI命令输出的JSON以显示快照。我想将此数据... 查看详情
如何使用 pyspark 在 aws 胶水中展平嵌套 json 中的数组?
】如何使用pyspark在aws胶水中展平嵌套json中的数组?【英文标题】:Howtoflattenanarrayinanestedjsoninawsglueusingpyspark?【发布时间】:2019-10-0415:51:11【问题描述】:我正在尝试将JSON文件展平,以便能够将其全部加载到AWSGlue中的PostgreSQL中... 查看详情
使用 jq 展平嵌套的 JSON
】使用jq展平嵌套的JSON【英文标题】:FlattennestedJSONusingjq【发布时间】:2016-09-2904:07:45【问题描述】:我想展平嵌套的json对象,例如"a":"b":1到"a.b":1以便在solr中消化它。我有11TB的json文件,它们都是嵌套的... 查看详情
使用 JQ 展平嵌套的 Json 对象
】使用JQ展平嵌套的Json对象【英文标题】:FlattennestedJsonobjectswithJQ【发布时间】:2019-01-2605:50:47【问题描述】:我正在创建一个脚本来将JSON对象转换为“字符串”文件(用于翻译目的)。这个想法是转变:"TRANSLATION1":"text1","TRANS... 查看详情
展平任何嵌套的 json 字符串并使用 spark scala 转换为数据帧
】展平任何嵌套的json字符串并使用sparkscala转换为数据帧【英文标题】:Flattenanynestedjsonstringandconverttodataframeusingsparkscala【发布时间】:2020-04-0513:23:25【问题描述】:我正在尝试创建从任何json字符串到数据帧的数据帧。json字符串... 查看详情
从嵌套的 json 数据创建 hive 表并展平字段
】从嵌套的json数据创建hive表并展平字段【英文标题】:createhivetablefromnestedjsondatawithflattenoutfields【发布时间】:2018-12-1712:44:46【问题描述】:我想从嵌套的json数据创建外部配置单元表,但字段应该从嵌套的json中展平。例如:-"k... 查看详情
使用 Azure Synapse pyspark 过滤器根据嵌套对象的数据类型展平嵌套的 json 对象
】使用AzureSynapsepyspark过滤器根据嵌套对象的数据类型展平嵌套的json对象【英文标题】:UsingAzureSynapsepysparkfilterflattenthenestedjsonobjectsbasedonnestedobject\'sdatatype【发布时间】:2021-12-3006:17:40【问题描述】:我正在使用AzureSynapsepyspark来... 查看详情
在熊猫数据框中展平嵌套的 Json
】在熊猫数据框中展平嵌套的Json【英文标题】:flatteningnestedJsoninpandasdataframe【发布时间】:2019-03-1815:09:29【问题描述】:我正在尝试将json文件加载到pandas数据框。我发现有一些嵌套的json。以下是示例json:\'events\':[\'id\':142896214... 查看详情
Python:展平多个嵌套的字典并追加
】Python:展平多个嵌套的字典并追加【英文标题】:Python:Flattenmultiplenesteddictandappend【发布时间】:2022-01-0403:37:53【问题描述】:大家好,我正在寻求帮助以尝试展平多个嵌套字典并将它们附加到新列表中。我有多个字典,从这... 查看详情
R:JSON 到 data.frame 的通用展平
...组的大型JSON文档时特别有用。有几个SO问题涉及处理深度嵌套的JSON结构并使用plyr、lapply等功能将它们转换为数据帧 查看详情
使用 jq 为 JSON 对象的嵌套数组中的属性展平数组
】使用jq为JSON对象的嵌套数组中的属性展平数组【英文标题】:FlattenarrayforpropertiesinnestedarrayofJSONobjectsusingjq【发布时间】:2019-04-2406:38:25【问题描述】:拥有带有(简化的)Jira数据的JSON,例如:"issues":["key":"TEST-A","fields":"issueli... 查看详情
将嵌套的 Json 文件展平为 Pandas 数据框
】将嵌套的Json文件展平为Pandas数据框【英文标题】:FlatteningnestedJsonfileintopandasdataframe【发布时间】:2021-05-1408:32:42【问题描述】:我有这个json文件"OrderMaster":"Order":"item":["row_id":"1-2LDPVI0","sequence_id":"3851101","end_date":"","name":"TV-Disco 查看详情
您可以将嵌套的 JSON 结构展平为单个 autobean 吗?
】您可以将嵌套的JSON结构展平为单个autobean吗?【英文标题】:CanyouflattenanestedJSONstructureintoasingleautobean?【发布时间】:2012-09-1400:41:10【问题描述】:假设以下JSON结构:\\"is_something\\":false,\\"name\\":\\"SomeName\\",\\"subtype\\":\\"total\\":0... 查看详情
如何使用嵌套字典列表展平熊猫数据框中的列
】如何使用嵌套字典列表展平熊猫数据框中的列【英文标题】:Howtoflattenacolumninapandasdataframewithalistofnesteddictionaries【发布时间】:2020-09-0616:06:31【问题描述】:我收到了单个JSON(500个JSON)并通过append()方法将它们添加到现有列... 查看详情