使用 jq 如何将一个非常大的 JSON 文件拆分为多个文件,每个文件都有特定数量的对象?

2023-12-13

我有一个很大的 JSON 文件,我猜有 400 万个对象。每个顶层都有几个嵌套在其中的级别。我想将其拆分为多个文件,每个文件包含 10000 个顶级对象(保留每个文件内部的结构)。 jq应该可以做到吧?我不知道怎么办。

所以数据是这样的:

[{
  "id": 1,
  "user": {
    "name": "Nichols Cockle",
    "email": "[email protected]",
    "address": {
      "city": "Turt",
      "state": "Thị Trấn Yên Phú"
    }
  },
  "product": {
    "name": "Lychee - Canned",
    "code": "36987-1526"
  }
}, {
  "id": 2,
  "user": {
    "name": "Isacco Scrancher",
    "email": "[email protected]",
    "address": {
      "city": "Likwatang Timur",
      "state": "Biharamulo"
    }
  },
  "product": {
    "name": "Beer - Original Organic Lager",
    "code": "47993-200"
  }
}, {
  "id": 3,
  "user": {
    "name": "Elga Sikora",
    "email": "[email protected]",
    "address": {
      "city": "Wenheng",
      "state": "Piedra del Águila"
    }
  },
  "product": {
    "name": "Parsley - Dried",
    "code": "36987-1632"
  }
}, {
  "id": 4,
  "user": {
    "name": "Andria Keatch",
    "email": "[email protected]",
    "address": {
      "city": "Arras",
      "state": "Iracemápolis"
    }
  },
  "product": {
    "name": "Wine - Segura Viudas Aria Brut",
    "code": "51079-385"
  }
}, {
  "id": 5,
  "user": {
    "name": "Dara Sprowle",
    "email": "[email protected]",
    "address": {
      "city": "Huatai",
      "state": "Kaduna"
    }
  },
  "product": {
    "name": "Pork - Hock And Feet Attached",
    "code": "0054-8648"
  }
}]

这是一个完整的对象:

{
  "id": 1,
  "user": {
    "name": "Nichols Cockle",
    "email": "[email protected]",
    "address": {
      "city": "Turt",
      "state": "Thị Trấn Yên Phú"
    }
  },
  "product": {
    "name": "Lychee - Canned",
    "code": "36987-1526"
  }
}

每个文件都是指定数量的对象。


[编辑:此答案已根据问题的修订进行了修订。]

使用jq解决问题的关键是-c命令行选项,它以 JSON-Lines 格式生成输出(即,在本例中,每行一个对象)。然后您可以使用诸如awk or split将这些行分发到多个文件中。

如果文件不太大,那么最简单的方法是启动管道:

jq -c '.[]' INPUTFILE

如果文件太大而无法轻松容纳在内存中,那么您可以使用 jq 的流解析器,如下所示:

jq -cn --stream 'fromstream(1|truncate_stream(inputs))'

或者您可以使用命令行工具,例如jstream or jm,这会更快,但当然必须安装。

有关 jq 流解析器的进一步讨论,请参见jq FAQ 中的相关部分:https://github.com/stedolan/jq/wiki/FAQ#streaming-json-parser

分区

有关对第一步中生成的输出进行分区的不同方法,请参见示例如何将大文本文件拆分为行数相同的小文件?

如果需要每个输出文件都是对象数组,那么我可能会使用awk一步执行分区和重构,但还有许多其他合理的方法。

如果输入是 JSON 对象序列

作为参考,如果原始文件由 JSON 对象流或序列组成,则适当的调用将是:

jq -n -c inputs INPUTFILE

Using inputs以这种方式可以有效地处理任意多个对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jq 如何将一个非常大的 JSON 文件拆分为多个文件,每个文件都有特定数量的对象? 的相关文章

  • 由于 json 字符串化 dict 键导致数据丢失

    考虑下面的例子 gt gt gt import json gt gt gt d 0 potato 0 spud gt gt gt json dumps d 0 potato 0 spud gt gt gt json loads json d
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • JSON 转换带有整数键的 Map

    我有一个测试代码的小样本 我尝试将 Map 转换为 JSON 字符串并返回 在解析 JSON 字符串时 结果映射包含字符串键 1 而不是整数键 1 从而导致测试失败 用作此映射的键的 POJO 也会发生同样的情况 这是预期行为还是我省略了
  • 如何从 BindingResult 获取控制器中的错误文本?

    我有一个返回 JSON 的控制器 它采用一种形式 通过 spring 注释来验证自身 我可以得到FieldError列表来自BindingResult 但它们不包含 JSP 将在
  • 我可以将 JSON 字符串转换为 JsonResult 吗?

    我在数据库中存储了一些存储的 JSON 字符串 我想将其作为 JsonResult 返回给客户端 我知道 Json object 将对象转换为 JsonResult 但如果我已经将结果存储在字符串中怎么办 我可以将其转换为 JsonResu
  • 如何将对象从 rake 任务传递给 Rabl 视图

    我正在尝试使用 rabl 从 rake 任务创建 json 文件 下面我有一个简化版本来测试 当我通过 url 查看 articles json 或 articles 2 json 时 我得到了预期的 json 响应 但是当我尝试通过 ra
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 如何使用 Node.js 解析 JSON? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我应该如何使用 Node js 解析 JSON 是否有一些模块可以安全地验证和解析 JSON 你可以简单地使用JSON parse h
  • 用于一个自定义字段的 Jackson 反序列化器?

    我相信我们需要一个自定义反序列化器来对我们类中的一个字段执行特定的操作 看来一旦我这样做了 我现在就负责反序列化所有其他字段 有没有办法让杰克逊反序列化所有字段except我在这里关心的那个人 public class ThingDeser
  • 在 Node.js 中创建 JSON 数组

    我需要在用 Node js 编写的服务器中创建一个 JSON 字符串 以便在请求时发送到客户端 问题是这个 JSON 取决于服务器中的可用数据 因此 JSON 数组的大小并不总是相同 我已经尝试了一整天 但尽管我感觉很接近 但我仍然不明白
  • 使用 NSJSONSerialization 解析 JSON

    对此进行了太多讨论 但我不知道如何解决我的问题 这是我从 WorldWeatherOnline 获取的 JSON 数据 JSON 有效 但我不知道如何解析它 这是我的代码 后面是 JSON 请帮忙 NSError errorInfo NSD
  • 反序列化动态 JSON 文件 C# NewtonSoft.JSON

    正在反序列化一个动态 JSON 文件 该文件可能包含 2 个单独的类 我不知道数组中将包含哪种类型的数据 问题是 我将根对象反序列化为 Base 类型 subtests 对象被反序列化为 Subtest 但 subtests 数组可能是 B
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • 如何按单个整数字段对 JSON 进行排序? [复制]

    这个问题在这里已经有答案了 我有以下 JSON title title order 0 order 9 order 2 JSON 包含很多字段 我如何根据字段对它们进行排序order field 我一直在寻找 Nodejs 中内置的东西 但
  • 如何强制控制器/操作使用 JsonValueProvider

    再会 我正在使用 ASP NET MVC 3 其中JsonValueProvider http haacked com archive 2010 04 15 sending json to an asp net mvc action met
  • Jackson:使用点表示法将 JSON 属性转换为嵌套对象

    我有一个像这样的 JSON id 1 name Jack parent id 2 注意 parent id 属性上的点 是否可以将这些 JSON 映射到以下类 class Child private int id private Strin
  • 在哪里可以访问 Gdx.files.local()?

    我有一个预制的 json 文件 我想测试一下 这个 Json 文件将被修改 所以我想读 写 我注意到内部是只读的 所以我想将我的 Json 文件保存在本地存储中 通过 eclipse 或操作系统 windows 8 手动 以便我可以通过 f
  • 循环遍历 JSON 数组

    我最近发布了另一个问题 用户立即为我指明了正确的方向 ajax type POST url data token token re 8 cache false timeout 5000 success function html auth
  • 将 jQuery 与 Selenium WebDriver 结合使用 - 如何将 JSON 对象转换为 WebElement?

    我正在使用 Selenium WebDriver 我想执行 jQuery 代码来查找一些元素 我的代码如下 public function uploadGrantDoc script return itemlist grant file u
  • 无法从 JQuery ajax 调用接收 JSON

    我已经确定来自服务器的 JSON 是有效的 手动进行 ajax 调用 但我真的很想使用 JQuery 我还使用 firebug 确定发送到服务器的 post URL 是正确的 但是 错误回调仍然被触发 解析错误 我还尝试了数据类型 文本 我

随机推荐

  • 如何将 ng-keypress 更改为 ng-change 功能

    这里我有一个文本框 在该字段中 有一个验证需要仅允许数字 字母和西班牙语字符 为此我在 javascript 中找到了一个函数 该功能在ng keypress中 我想将其更改为ng change 如果我改变 该功能不会触发 如何将函数更改为
  • 如何了解quadpack使用的集成技术[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我一直在学习QUADPACK 并使用 scipy integrate quad 来计算从0到无穷大的积分 它给出了非常好的结果 但现在我想知道该软件应用了哪种集成方法 QAGI
  • 如何在雪花用户定义函数中编写动态查询

    我正在雪花中编写以下函数 create OR REPLACE function myTestFunc tbl name VARCHAR Column Name varchar id VARCHAR returns varchar as se
  • PHP - 注意:未定义的索引:[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 注意 未定义的变量 和 注意 未定义的索引 我正在尝试制作一个在数据库 MySQL 中注册用户的注册表单 该代码应该注册 Name Surname Username Password Emai
  • 正确,Matplotlib 中的“全长”左右箭头?

    考虑以下简单示例 import matplotlib pyplot as plt fig plt figure ax fig add subplot ax plot 0 0 ax grid ax set xlim 0 10 ax set y
  • 在.net mvc 中保存数据

    我正在实现一个带有结果页面支持分页的搜索模块 NerdDinner 提供的示例将页码作为 Index 操作的参数传递 每次用户点击不同的页码时 该操作都会使用页码执行查询 我的问题是 我的搜索需要更多的标准 例如价格 材料 型号等 而不仅仅
  • 从 Windows Azure 连接到远程 SQL Server 2008

    我尝试从 Windows Azure 辅助角色连接到 SQL Server 2008 实例 不是 SQL Azure 而是远程托管的 SQL Server 2008 标准版 但收到以下错误消息 System Data SqlClient S
  • 在 onActivityResult 中检测电子邮件是否已发送

    我想在我的 onActivityResult 方法中检测人们是否已发送电子邮件或按下后退按钮或丢弃它 我怎样才能做同样的事情 我正在这样做 String reciepients result toArray new String resul
  • 实体框架 - 在事务内的“SaveChanges”之前检索 ID

    在实体框架中 在调用 SaveChanges 之前 是否有任何方法可以检索事务内新创建的 ID 身份 我需要第二次插入的 ID 但它总是返回为 0 ObjectContext objectContext IObjectContextAdap
  • 在Mongodb中存储100MB的大文件

    我想在 MongoDB 中存储 100MB 到 1GB 的大文件 就像 BLOB 对象一样 以后可以更轻松地检索它 我使用的编程语言是 PHP 请从这个意义上指导我 为此 您需要使用 GridFS 因为通常 MongoDB 文档限制为 16
  • JSF 模板:呈现的页面缺少 DOCTYPE

    TL DR 我无法让 DOCTYPE 标头出现在我的 JSF 页面上 我刚刚继承了一个 JSF 1 2 项目 该项目在 IE 下存在一些显示问题 我是 JSF 的新手 但我认为问题源于这样一个事实 渲染的页面 来自 查看源代码 不包含正确的
  • 合并两个不同时间粒度的时间序列

    我有两个包含时间序列数据的 CSV 文件 我想将这两个合并到一个文件中 File1 具有以 1 分钟为间隔的周期性数据 File2 具有非周期性的事件触发数据 File2 中数据的时间戳可能与 File1 中的数据一致 也可能不一致 我想合
  • 访问策略不可用

    我正在尝试在 Azure Key Vault 中输入访问策略 但收到消息 访问策略不可用 此密钥保管库的访问配置设置为基于角色的访问控制 要添加或管理您的访问策略 请转至访问控制 IAM 页面 在azure中 我如何输入访问策略 我已经添加
  • 如何在Sql中创建用户定义的类型

    我不知道如何创建具有可选约束的域 我试过 CREATE DOMAIN idx INT CHECK VALUE gt 100 AND VALUE lt 999 但遇到了以下错误 CREATE DROP 或 ALTER 语句中使用了未知的对象类
  • 如何使用 AngularDart 根据类型和名称进行依赖注入?

    我有两个服务 每个服务都需要一个不同的WebSocket 作为构造函数参数 我想使用 AngularDart 的依赖注入来传递 WebSocket 连接 但我不能单独依赖类型 因为我有两个 WebSocket 如何注释或指定每个服务应使用哪
  • asp.net mvc ajax post返回404未找到

    我正在尝试使用 jquery ajax 函数执行 ajax 请求 我有一个非常奇怪的行为 我的文件夹结构是这样的 我的客户端 ajax 调用 在 UserManagement Index cshtml 中 如下所示 var rolename
  • 带有多个选择框的 jQuery 验证插件

    我正在使用 jQuery Validate 来验证我的表单 问题是我有一个带有多个选择框 动态数字 的表单 并且它有一个动态名称 gt answers question id 我见过一些脚本 当有固定名称时 您可以使用它来寻址所有输入字段
  • 将 Apache ServiceMix 连接到 Websphere MQ

    我正在尝试从部署为 Apache Service Mix 上的 OSGI 包的驼峰路由连接到 websphere MQ 队列管理器 我已经部署了 Websphere MQ 附带的 IBM OSGI 包 并按如下方式配置了 Spring 配置
  • 如何在Python中对范围函数的值求和[重复]

    这个问题在这里已经有答案了 基本上我想总结表达式 k 5 的结果x 17 但 x 不同 例如 k 53 17 k 5 4 17 等等 到目前为止 我的代码如下所示 结果需要是来自范围 3 9 的 for x in range 3 9 k 5
  • 使用 jq 如何将一个非常大的 JSON 文件拆分为多个文件,每个文件都有特定数量的对象?

    我有一个很大的 JSON 文件 我猜有 400 万个对象 每个顶层都有几个嵌套在其中的级别 我想将其拆分为多个文件 每个文件包含 10000 个顶级对象 保留每个文件内部的结构 jq应该可以做到吧 我不知道怎么办 所以数据是这样的 id 1