当前位置: 首页 > 面试题库 >

使用jq展平嵌套的JSON

屠和洽
2023-03-14
问题内容

我想拉平一个嵌套的JSON对象,如{"a":{"b":1}}{"a.b":1}为了消化它Solr中。

我有11
TB的json文件,这些文件既嵌套又包含字段名称中的点,这意味着elasticsearch(点)或solr(嵌套时不带_childDocument_符号)都不能按原样消化它。

其他解决方案是用下划线替换字段名称中的点并将其推送到elasticsearch,但是我对solr有更好的经验,因此我更喜欢扁平化解决方案(除非solr可以按原样消化那些嵌套的json?)。

仅在消化过程比solr花费更少的时间的情况下,我才会选择elasticsearch,因为我的优先级是尽可能快地消化(因此,我选择了jq而不是在python中编写脚本)。

请帮助。

编辑:

我认为示例3和示例4为我解决了这个问题:https : //lucidworks.com/blog/2014/08/12/indexing-custom-json-
data/

我会尽快尝试。


问题答案:

您还可以使用以下jq命令以这种方式展平嵌套的JSON对象:

[leaf_paths as $path | {"key": $path | join("."), "value": getpath($path)}] | from_entries

它的工作方式是:leaf_paths返回一个数组流,这些数组代表给定JSON文档上出现“叶子元素”的路径,即没有子元素的元素,例如数字,字符串和布尔值。我们将该流通过管道传递到具有keyvalue属性的对象中,其中key包含路径数组的元素(由点组成的字符串),并value包含该路径处的元素。最后,我们将整个对象放入一个数组中并from_entries在其上运行,这将一个{key, value}对象数组转换为包含这些键值对的对象。



 类似资料:
  • 问题内容: 我正在尝试将JSON转换为CSV文件,可用于进一步分析。我的结构存在的问题是,当我转换JSON文件时,我有很多嵌套的字典/列表。 我尝试使用pandas ,但它只会使第一级扁平化。 任何想法如何讨好整个JSON文件,以便我可以为单个(在本例中为虚拟机)条目创建到CSV文件的单行输入?我已经尝试过这里发布的几种解决方案,但是我的结果始终只是将第一级展平。 这是示例JSON(在这种情况下,

  • < code>[[{header=C,value=dsd},{header=D,value=test},{header=E,value=e},{header=F,value=hhh},{header=G,value=ghgh}]] 上面是JsonLists数组的数组,我需要将外部数组扁平化为JsonLists的内部数组。 我最终也只会从JsonList中获取值,并将这些值放入它自己的单独数组中:

  • 我有一门java课 在上面的场景中,示例具有子示例,这又是示例列表。此嵌套可以是 n 级。我想实现的是有一个示例列表,即扁平化上面的对象并将所有示例收集到最终列表中(收集所有n级示例)。一个明显的方法是递归。在Java中有什么方法可以更有效地实现它。我尝试了一些java 8概念,但它们不符合要求。

  • 问题内容: 您好,我试图通过Mars Insight API 显示火星天气。发生的问题是数据以JSON格式返回并且具有三个级别的API文档。我可以使用3-4种不同的方法来拉主键,但是当我尝试获得次要或三次键时,也就没有问题了。 问题答案: 使用递归展平嵌套 用Python递归思考 在Python中展平JSON对象 展平 该功能将用于展平 输出量

  • 问题内容: 也许有人可以帮助我。我试图将以下ist放到pandas数据框中: 结果应如下所示: 但是我尝试做的所有事情都无法获得预期的结果。我用了这样的东西: 但是然后我松开了_source字段之外的类型。我也尝试与 但是我不知道如何使用字段_source并将其附加到原始数据帧。 有人知道如何做到这一点并达到预期的结果吗? 问题答案: 用途:

  • 问题内容: 假设你有一个像这样的字典: 你将如何将其扁平化为: 问题答案: 基本上与展平嵌套列表的方式相同,只需要做额外的工作即可按键/值迭代字典,为新字典创建新键并在最后一步创建字典。