如何从文本文件中检索多个 JSON 对象,其中对象*不*由分隔符分隔?

2024-06-18

我有数千个包含多个 JSON 对象的文本文件,但不幸的是这些对象之间没有分隔符。

这些对象存储为字典,其中一些字段本身就是对象。每个对象可能具有可变数量的嵌套对象。具体来说,一个对象可能如下所示:

{field1: {}, field2: "some value", field3: {}, ...} 

并且数百个这样的对象在文本文件中没有分隔符地连接起来。这意味着我既不能使用json.load() nor json.loads().

关于如何解决这个问题的任何建议。是否有已知的解析器可以执行此操作?


这将从字符串中解码 JSON 对象的“列表”:

from json import JSONDecoder

def loads_invalid_obj_list(s):
    decoder = JSONDecoder()
    s_len = len(s)

    objs = []
    end = 0
    while end != s_len:
        obj, end = decoder.raw_decode(s, idx=end)
        objs.append(obj)

    return objs

这里的好处是你可以很好地使用解析器。因此它不断地告诉你exactly它发现错误的地方。

Examples

>>> loads_invalid_obj_list('{}{}')
[{}, {}]

>>> loads_invalid_obj_list('{}{\n}{')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "decode.py", line 9, in loads_invalid_obj_list
    obj, end = decoder.raw_decode(s, idx=end)
  File     "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 376, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting object: line 2 column 2 (char 5)

清洁溶液(稍后添加)

import json
import re

#shameless copy paste from json/decoder.py
FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL
WHITESPACE = re.compile(r'[ \t\n\r]*', FLAGS)

class ConcatJSONDecoder(json.JSONDecoder):
    def decode(self, s, _w=WHITESPACE.match):
        s_len = len(s)

        objs = []
        end = 0
        while end != s_len:
            obj, end = self.raw_decode(s, idx=_w(s, end).end())
            end = _w(s, end).end()
            objs.append(obj)
        return objs

Examples

>>> print json.loads('{}', cls=ConcatJSONDecoder)
[{}]

>>> print json.load(open('file'), cls=ConcatJSONDecoder)
[{}]

>>> print json.loads('{}{} {', cls=ConcatJSONDecoder)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "decode.py", line 15, in decode
    obj, end = self.raw_decode(s, idx=_w(s, end).end())
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 376, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting object: line 1 column 5 (char 5)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从文本文件中检索多个 JSON 对象,其中对象*不*由分隔符分隔? 的相关文章

  • 如何使用 pywin32 在 Python 中获取特定应用程序窗口的句柄?

    我正在尝试修改一些在 Windows 10 中截取特定应用程序窗口屏幕截图的 Python 代码 我正在尝试使用win32ui win32guipywin32 包中的模块用于此目的 这是损坏的代码 def getWindow name Wi
  • 使用 Python 请求通过 POST 请求发送图像

    我目前正在尝试使用 Python 3 5 和 Requests 库来发送 POST 请求 此 POST 将发送一个图像文件 这是示例代码 import requests url https api address files files o
  • 如何让 Numpy 将每一行/张量视为一个值

    许多功能 例如in1d https docs scipy org doc numpy 1 13 0 reference generated numpy in1d html and setdiff1d https docs scipy org
  • 我可以使用 Python 访问 ImageMagick API 吗?

    我需要使用图像魔术师 http www imagemagick org script index php因为 PIL 没有我正在寻找的可用图像功能量 但是 我想使用Python python 绑定 PythonMagick 自 2009 年
  • Python Turtle 未按照文档示例填充

    我试图向我女儿展示一些代码 并认为海龟会很有趣 我更喜欢数字 但这对孩子们来说并不有趣 我在重现文档示例时遇到问题 这更让我烦恼 因为我无法弄清楚 我们还有很多其他事情可以做 The documentation example copied
  • dulwich - 从远程仓库身份验证克隆

    我找不到有关此主题的任何资源 我需要通过提供用户名和密码从私有存储库进行克隆 然而 当它们作为关键字参数提供给 dulwich get client from path 时 会出现错误 提示 未知参数 用户名 这似乎是一件简单的事情 但我找
  • 如何设置appache2的WSGI与python 3.7一起使用?

    我使用的是 ubuntu 16 04 并安装了 python 3 7 并使用以下说明将其设置为默认值 无法在 ubuntu 中将默认 python 版本设置为 python3 https stackoverflow com question
  • tf.reshape 与 tf.contrib.layers.flatten

    所以我正在运行 CNN 来解决分类问题 我有 3 个转换层和 3 个池化层 P3是最后一个池化层的输出 其维度为 Batch size 4 12 48 我想将该矩阵展平为 Batch size 2304 尺寸矩阵 为2304 4 12 48
  • 安装/编译 pylzma(lzma python 绑定)

    我已经向作者提出了这个问题website http www joachim bauch de projects pylzma comment page 1 comment 5211 但我想我也可以在这里问 我一直在尝试使用以下设置安装 py
  • 从 Python 执行 PowerShell 脚本的最佳方式是什么

    之前关于该主题的所有帖子都涉及其用例的具体挑战 我认为 如果有一篇文章只讨论从 Python 运行 PowerShell 脚本的最简洁方法 并询问是否有人有比我发现的更好的解决方案 那将会很有用 绕过 PowerShell 尝试以与预期不同
  • Scipy - 求矩阵列空间的基数

    我正在尝试编写一个简单的单纯形算法 其第一步是找到一个基本的可行解决方案 选择 A 的线性独立列的一组 B 将 x 中与不在 B 中的列相对应的所有分量设置为零 求解 m 个所得方程以确定 x 的分量 这些是基本变量 我知道解决方案将涉及使
  • 强制 shell 在 SunGrid 引擎中使用 conda 变量中的 python [重复]

    这个问题在这里已经有答案了 我正在尝试在 SunGrid 引擎中执行 python 文件 并且从 anaconda3 环境变量中执行它 我的代码很简单 from future import print function import url
  • 与正在运行的进程通信

    We have 基于Python的服务器 A 正在运行的命令行应用程序 在同一台 Linux 机器上 能够读取stdin 计算一些东西并将输出提供给stdout B 将输入从 A 发送到的最佳 最优雅 方式是什么 stdin B 的 并等待
  • TensorFlow 的 Print 或 K.print_tensor 不会在损失函数中打印中间张量

    我为 Keras 模型编写了一个相当复杂的损失函数 并且它不断返回nan训练时 因此 我需要在训练时打印中间张量 我知道你不能在损失函数中执行 K eval 因为张量未初始化 不过 我都尝试过K print tensor and tf Pr
  • 如何在不重复代码的情况下定义 randint 元组?

    我经常使用 randint 元组来表示颜色值等 a b c randint 0 255 randint 0 255 randint 0 255 当我认为必须有更好的方法时 有吗 使用numpy 1 import numpy as np tu
  • Python:装饰器可以确定函数是否在类中定义吗?

    我正在编写一个装饰器 出于各种烦人的原因 0 检查它所包装的函数是独立定义还是作为类的一部分定义 以及新类是哪些类的子类 是很方便的 例如 def my decorator f defined in class print r s f de
  • Flask 从线程中删除会话变量

    我尝试实施投票系统 它的工作原理是这样的 如果用户对帖子进行投票 我会在会话变量中记录其临时状态 已投票 已加星标等 如果当前用户在我将结果保存到临时表之前尚未投票 用户可以在 5 分钟内更改投票 5 分钟后 结果将使用线程永久写入数据库
  • 显示进度的脚本?

    当我的 python 脚本处理大文件时 我想向用户显示进度 我见过脚本印刷 在 shell 中的同一光标位置显示进度 我怎样才能在Python中做到这一点 你应该使用python 进度条 http code google com p pyt
  • Scipy odeint 非负解

    显然 从 ODE 求解器获得非负解并非易事 https stackoverflow com questions 6977107 solving a delay differential equation dde system constra
  • 编写适用于 ndarray 和 MaskedArray 的通用数值函数的最佳实践

    有没有比以下更漂亮的方式 import numpy as np from numpy import ma def foo x pkg ma if isinstance x ma MaskedArray else np return pkg

随机推荐

  • TransitionEnd 事件未触发?

    我有多个元素 每个元素都以 某种程度上 持续时间进行动画处理 我使用 CSS3 过渡 jQuery 库和transitionend辅助函数来自大卫 沃尔什 https davidwalsh name css animation callba
  • 如何通过函数设置指针引用

    在 C 中 我尝试通过将指针发送到函数来设置指针的值 但该值不会在函数外部更改 这是我的代码 include
  • Java - NoSuchMethodError 未被异常捕获[重复]

    这个问题在这里已经有答案了 我的印象是 Exception 非常适合捕获所有可能的异常 因为它们中的每一个都以 Exception 作为基类 然后 在开发 Android 应用程序时 我使用了以下方法 该方法在某些自定义 ROM 中已被删除
  • Django:重置密码不发送电子邮件

    我正在使用 Django 密码重置 我的代码中有这个代码设置 py EMAIL USE TLS True EMAIL HOST smtp gmail com EMAIL PORT 587 EMAIL HOST USER email prot
  • 如何在Android中设置对话框的图标

    我想在Android中自定义一个对话框 我知道如何设置对话框的标题 dialog setTitle O message 现在我想在标题前面设置图标 我怎样才能实现这个目标 Dialog dialog dialog new Dialog th
  • 创建全球唯一的 Android 标识符

    说到Android唯一ID 相信大家都见过this https stackoverflow com questions 2785485 is there a unique android device id 但是我也试图提出一个解决方案来唯
  • Storybook 和 AntDesign 组件 - 如何使用 CRA 和 Typescript 进行设置?

    我想使用 Typescript 在我的 CRA 项目中使用基于 AntDesign 组件构建的组件来设置 Storybook CRA v3 故事书 v5 25 AntDesign v3 23 2 我成功设置了 CRA AntDesign 设
  • 将按钮固定到容器的底角

    我正在使用 Flexbox 使表单垂直和水平居中 在此表单中 我想将一个按钮固定到 Flexbox 容器的右下角 我不知道如何将按钮固定在右下角 html body height 100 container height 100 displ
  • 具有多个 orderBy 的 Android firebase 查询

    我想检索我的 firebase 数据库中所有类型为 福音 的数据 这是我的数据库 DatabaseReference infoRef FirebaseDatabase getInstance geReference child info i
  • std::setw 如何处理字符串输出?

    我正在尝试使用设置宽度setw但是 对于将字符串输出到输出文件 我无法使其工作 我有下面的例子 setw example include
  • pine、node.js (express) 和 Access-Control-Allow-Origin

    我正在本地电脑上开发一个应用程序 前端应该使用 spinjs 构建 后端 api 使用 node js 构建 Spine 运行在端口 9294 上 node js 运行在端口 3000 上 在 Spine 中 我在模型中添加了以下内容 ur
  • 从 Mailgun 表单 Post PHP 中检索附件

    如何检索并保存通过 Mailgun 的 POST 表单发送给我的附件 下面是一些参数 attachment 1 filename gt crabby gif type gt image gif name gt attachment 1 te
  • 获取对 JOptionPane 静态方法创建的对象的引用

    我想知道是否可以获取对由 JOptionPane 的静态方法之一 例如 showMessageDialog 创建的 JDialog 对象的引用 我打算修改对话框在屏幕上出现的位置 更具体地说 我希望对话框默认显示在主应用程序窗口的左上角 而
  • viewroot 构建后如何应用 JSF2 PhaseListener?

    在我的 JSF2 应用程序中 我有一个阶段侦听器 需要在 RENDER RESPONSE 之前但在 JSF 构建 viewroot 之后执行 首先 我所做的就是在 faces config 中注册我的 PhaseListener 然后监听器
  • 加载外部 XSLT 时发生异常

    我有大量来自第三方的 XSLT 我需要用它来转换一些数据 如果我使用 xsltproc 它工作正常并按预期输出数据 我有以下 C 代码来尝试在进程中使用它 sXML 是 XML 的集合 oJob ContentTemplate 是 XSLT
  • 地址常量表达式

    我在阅读 C 编程语言第四版 一书时正在深入研究地址常量表达式 它有一个简短的段落描述了地址常量表达式 静态分配对象的地址 例如全局对象 变量 是常数 然而 它的值是由链接器分配的 而不是编译器 因此编译器无法知道 这样的地址常量 这限制了
  • 如何在 Yii 2 中创建 BaseController 扩展 Controller

    正如标题 我将创建自定义控制器并覆盖 Yii 2 中的核心控制器 下面是我的代码 创建BaseController 我把这个文件放在root components中 namespace yii base use Yii class Base
  • 在 JRE 级别限制密码套件

    我们的 Java 应用程序公开了许多不同的接口 SMTP FTP HTTP 并通过 SSL TLS 进行保护 现在的目标是限制这些接口上允许的密码套件仅包含 强 密码套件 我已经有了一个列表 并且很清楚如何使其适用于特定套接字 socket
  • React Typescript - 在路由中传递时如何将类型添加到 location.state

    当我将react router props发送到路由中的组件时 我收到错误 因为我有特定的状态 我传递了该组件 但错误显示在我的路由中 这是路线代码
  • 如何从文本文件中检索多个 JSON 对象,其中对象*不*由分隔符分隔?

    我有数千个包含多个 JSON 对象的文本文件 但不幸的是这些对象之间没有分隔符 这些对象存储为字典 其中一些字段本身就是对象 每个对象可能具有可变数量的嵌套对象 具体来说 一个对象可能如下所示 field1 field2 some valu