解析非标准分号分隔的“JSON”

2023-12-03

我有一个非标准的“JSON”文件要解析。每个项目均以分号分隔,而不是逗号分隔。我不能简单地替换; with ,因为可能有一些值包含;, 前任。 “你好世界”。我怎样才能将其解析为与 JSON 通常解析它的结构相同的结构?

{
  "client" : "someone";
  "server" : ["s1"; "s2"];
  "timestamp" : 1000000;
  "content" : "hello; world";
  ...
}

使用Pythontokenize module将文本流转换为使用逗号而不是分号的文本流。 Python 分词器也很乐意处理 JSON 输入,甚至包括分号。分词器将字符串呈现为整个代币和“原始”分号在流中作为单个分号token.OP供您替换的令牌:

import tokenize
import json

corrected = []

with open('semi.json', 'r') as semi:
    for token in tokenize.generate_tokens(semi.readline):
        if token[0] == tokenize.OP and token[1] == ';':
            corrected.append(',')
        else:
            corrected.append(token[1])

data = json.loads(''.join(corrected))

这假设格式becomes用逗号替换分号后,JSON 有效;例如结束语之前没有尾随逗号] or }允许,尽管您甚至可以跟踪添加的最后一个逗号,并在下一个非换行符是右大括号时再次删除它。

Demo:

>>> import tokenize
>>> import json
>>> open('semi.json', 'w').write('''\
... {
...   "client" : "someone";
...   "server" : ["s1"; "s2"];
...   "timestamp" : 1000000;
...   "content" : "hello; world"
... }
... ''')
>>> corrected = []
>>> with open('semi.json', 'r') as semi:
...     for token in tokenize.generate_tokens(semi.readline):
...         if token[0] == tokenize.OP and token[1] == ';':
...             corrected.append(',')
...         else:
...             corrected.append(token[1])
...
>>> print ''.join(corrected)
{
"client":"someone",
"server":["s1","s2"],
"timestamp":1000000,
"content":"hello; world"
}
>>> json.loads(''.join(corrected))
{u'content': u'hello; world', u'timestamp': 1000000, u'client': u'someone', u'server': [u's1', u's2']}

令牌间的空白已被删除,但可以通过注意来重新设置tokenize.NL代币和(lineno, start) and (lineno, end)位置元组是每个标记的一部分。由于令牌周围的空格对于 JSON 解析器来说并不重要,因此我并没有为此烦恼。

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

解析非标准分号分隔的“JSON” 的相关文章

  • Python 使用 ssl.getpeercert() 从 URL 获取通用名称

    我正在尝试获取证书颁发者信息 通用名称 但链接中的代码不适用于某些 URL 如何在 python 中获取证书颁发者信息 https stackoverflow com questions 30862099 how can i get cer
  • facebook graph api 调用 python 中的 appsecret_proof

    在 python 中使用 appsecret proof 参数进行图形 api 调用的正确方法是什么 有没有允许这样的图书馆 我试图使用 python for facebook 库 但文档实际上不存在 所以我无法弄清楚 您可以使用以下方法来
  • df.drop(如果存在)

    下面是一个函数 它接受一个文件并删除列名row num start date end date 问题是并非每个文件都有这些列名 因此该函数返回错误 我的目标是更改代码 以便删除这些列 如果存在 但如果某个列不存在则不会返回错误 def re
  • 将文件上传到S3的模拟测试用例

    我们如何模拟文件上传到 S3 我尝试过这样的事情 file mock mock MagicMock spec File name FileMock mock patch storages backends s3boto S3BotoStor
  • 如果我不重置 Python 的 ContextVars 会发生什么?

    这是Python中的内存泄漏吗 import contextvars contextvar contextvars ContextVar example while True string hello world token context
  • 在Python中从字符串中删除除字母数字字符之外的所有内容

    使用 Python 从字符串中去除所有非字母数字字符的最佳方法是什么 中提出的解决方案这个问题的 PHP 变体 https stackoverflow com questions 840948可能会进行一些小的调整 但对我来说似乎不太 Py
  • ValueError:展开时包装器循环

    我的示例代码中的 Python3 测试用例 文档测试 失败 但在 Python2 中同样可以正常工作 test py class Test object def init self a 0 self a a def getattr self
  • Pandas datetools模块错误

    我正在尝试从 pandas datetools 调用模块 但收到错误消息 指出 mofule 对象没有我所调用的名称的属性 想知道是否有人可以阐明这个问题 下面是我尝试使用的代码 import blpapi import pandas as
  • 使用 xlwings 排序(pywin32)

    我需要使用 python 按给定行对 Excel 电子表格进行排序 为了进行测试 我使用以下数据 在名为 xlwings sorting xlsx 的文件中 Numbers Letters Letters 2 7 A L 6 B K 5 C
  • 来自 ANTLR 解析树的 Python AST?

    我找到了一个ANTLR4 Python3 语法 https github com bkiers python3 parser 但它会生成一个解析树 该树通常有许多无用的节点 我正在寻找一个已知的包来从该解析树获取 Python AST 这样
  • 合并多维数组并对在另一列中共享公共值的列值求和

    我有 3 个数组用于存储帖子 评论和点赞 这些是 JSON 字符串 comments JSON 存储用户和评论点 comments user 5 points 12 user 2 points 1 user 3 points 1 likes
  • 无法在 VS Code 中导入

    我是 python 新手 一直在使用 VS code 现在我正在研究汤普森采样问题 需要 numpy 和 matplotlib 我已经导入了这两个库 但 VS code 给出了无法导入的错误 我知道我必须使用 PIP 进行安装 并且我已经看
  • 基本的 Python OpenCV 裁剪和调整大小

    有人可以帮我一些裁剪算法吗 它的 openCV 我想弄清楚这一点 我知道方法是crop image y y1 x x1 如果我有一个带有 new dimensionXxnew dimensionY 像素的图像 并且我想将其裁剪为相同的宽度
  • Python 类中的继承顺序

    我有课ExampleSim它继承自基类Physics class Physics object arg1 arg1 def physics method print physics method class ExampleSim Physi
  • 避免 Python 3 的多处理队列中的竞争条件

    我正在尝试找到大约 61 亿 自定义 物品的最大重量 并且我想通过并行处理来完成此操作 对于我的特定应用程序 有更好的算法不需要我迭代超过 61 亿个项目 但解释它们的教科书超出了我的能力范围 我的老板希望在 4 天内完成此任务 我认为我公
  • Matplotlib:以数据坐标中给定的宽度绘制线条

    我试图弄清楚如何绘制具有数据单位宽度的线条 例如 在下面的代码片段中 我希望宽度为 80 的线的水平部分始终从 y 40 延伸到 y 40 标记 并且即使坐标系的限制也保持这种状态改变 有没有办法用 matplotlib 中的 Line2D
  • 在 folium 中显示栅格数据(不处理任何数据值)。

    我正在尝试使用 folium 显示栅格类型数据 numpy 数组 这是我到目前为止所拥有的 import folium from folium plugins import ImageOverlay import numpy as np f
  • 为什么我必须在 pybson (=bson, GitHub:py-bson) 之后安装 pymongo 才能成功导入 pybson?

    编辑 将问题放在网上很长时间后 我注意到这是一个衍生产品无法使用 pymongo 2 2 连接到 MongoDB 2 0 5 数据库 https stackoverflow com questions 10603754 cant conne
  • Pandas .apply() 函数中的异常处理

    如果我有一个数据框 myDF DataFrame data 11 11 22 2A 33 33 columns A B 给出以下数据帧 从 stackoverflow 开始 对于数据帧的图像没有足够的声誉 A B 0 11 11 1 22
  • 以任意深度嵌套 defaultdict

    我想嵌套任意数量的默认字典 如下所示 from collections import defaultdict D defaultdict lambda defaultdict int 正如所描述的那样工作正常earlier https st

随机推荐

  • 是否可以在 Telosys 模板中调用专门创建的函数?

    我使用特洛西斯 https www telosys org 生成Python源代码并且运行良好 但我有一个特定的需求 可以通过调用特定的转换函数来解决 是否可以创建特定函数并在 Telosys 模板中调用它 例如 myFunction ab
  • 这种安装 COM+ 的方法有效吗?

    我一直在尝试使用WiX 3 7安装一个COM 组件 我一直在使用在 StackOverflow 上找到的几个 WiX 代码片段 虽然我可以生成 MSI 但当我安装该 msi 时 它会失败并出现如下错误 RegisterComPlusAsse
  • 如何在 Access SQL 中的列别名中使用表名?

    在 MS Access 中 我的表是 Exam id name 我的查询是 select Exam id as Exam id Exam name as Exam name from Exam 现在 当我执行此查询时 发生了此错误 Exam
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • 在结构中使用 typedef 来命名和索引文本命令

    我正在使用一个简单的命令行应用程序 它接受 ASCII 文本并将其解释为命令 我尝试通过以下示例最小化此应用程序中的冗余http gcc gnu org onlinedocs cpp Concatenation html 例如 考虑一个解释
  • 我什么时候在代码中需要多个 TraceSource?

    如果一个应用程序将其所有活动数据写入一个日志文件 那么拥有多个 TraceSource 是否有任何用处 我只是对代码中需要多个 TraceSource 的用例感到好奇 请参阅其他问题的这些答案 作为使用 TraceSources 的良好起点
  • Javascript 函数 - 将字符串参数转换为运算符

    如果我的问题不清楚 不知道如何措辞 请道歉 我正在尝试创建一个接受两个数字和一个包含运算符 例如 的字符串的函数 我已在字符串上使用 valueOf 来提取运算符 但是 num1 和 num2 参数似乎并未计算为传递的数字参数 为什么会发生
  • 使用 UNION 子查询的查询需要很长时间

    我在某些依赖于子查询的查询上遇到了一个奇怪的问题 它们运行得快如闪电 直到我在子查询中使用 UNION 语句 然后他们就无休无止地跑 我10分钟后就给了 我现在描述的场景不是我一开始的场景 但我认为它消除了很多可能的问题 但却产生了同样的问
  • 在 QT 中获取窗口 WId 列表

    我正在 QT 中编写一个库 它将截取任意外部窗口的屏幕截图 我知道如何使用截图QScreen grabWindow 但这需要作为参数WId 我想知道是否有办法获得列表WIds 表示屏幕和 或桌面上的所有窗口 或类似的东西 例如获取WId对于
  • 需要左值作为赋值的左操作数(C 程序)

    我收到一个错误 lvalue required as left operand of assignment 它分配给该行 if ch ch ch ch ch ch ch ch etc 我只是想检查我正在查看的字符是否等于这些字符中的任何一个
  • 犰狳如何摆脱错误信息

    尽管成功捕获了异常 但运行以下代码仍然会产生一条错误消息 该消息会发送到 stdout 而不是 stderr Mat
  • 如何实现winform会话,尤其是会话超时

    您好 我计划在窗口应用程序中实现类似会话的功能 但不是为了首先保存使用信息 主要目的是在会话过期后注销或至少提示输入登录 密码 我找不到有关在线超时功能的信息 如果有人可以向我指出一些资源或与我们分享他的经验 我将非常感激 感谢您阅读本文
  • GPS 需要互联网吗?

    两个都需要转吗Internet and GPS在我可以在我的应用程序中读取我当前的位置 国家 城市 地区等 之前 如果是的话 那么有什么替代方法可以仅通过 GPS 获取位置吗 由于互联网可用性是一个问题 正如其他人所说 GPS 不需要互联网
  • DoExpressCheckoutPayment 或 /execute 交易始终处于待处理状态。为什么?

    当我将 PayPal 与我的沙盒测试帐户集成时 我通过DoExpressCheckoutPaymentAPI调用 或者PayPal的新 executeREST 呼叫正在等待处理 我必须手动接受它们 否则我必须等待 3 5 天 为什么 这种情
  • 为什么一些 PHP 程序员在其命名空间中使用双反斜杠而不是单个反斜杠?

    今天在扫描一些库代码时 我已经多次看到它 而不是声明一个Namespace Like This it s Done Like This 有人可以启发我吗 这背后的原因是什么 我只能想象它要么是特定于框架的东西 我不相信 要么是一种我不理解的
  • 如何在curses中启用鼠标移动事件

    如何在curses中启用鼠标移动事件 我找到了这个NCurses 中的鼠标移动事件 Xterm 控制序列 and ncurses 鼠标 移动但我不明白如何在 python curses 中启用鼠标移动事件 我认为它与 TERM xterm
  • 使用 Javascript 配置 Parsley,而不是 html 数据属性

    如何使用 javascript 而不是 html 数据属性来配置 Parsley 文档示例展示了如何使用 JS 配置 Parsley 表单实例和一些全局字段选项 但我也希望能够以这种方式添加和配置所有字段实例 我不想使用 html 数据属性
  • WinForms 应用程序由于 SystemEvents.OnUserPreferenceChanged 事件而挂起

    我一直在处理客户端安装中挂起的奇怪应用程序 在尝试了几件事之后 我得出的结论是 如果没有转储 它就无法工作 所以我在闲暇时从我的一位客户那里得到了转储 我必须注意 它只发生在我的安装中 而不是在我的开发计算机中 在我的转储中 我看到 Sys
  • 调用 FirebaseInstanceId.getToken 的行为

    我有两类问题FirebaseInstanceId getToken String authorizedEntity String scope 一是多次调用该方法 一是调用该方法是否触发FirebaseMessagingService onN
  • 解析非标准分号分隔的“JSON”

    我有一个非标准的 JSON 文件要解析 每个项目均以分号分隔 而不是逗号分隔 我不能简单地替换 with 因为可能有一些值包含 前任 你好世界 我怎样才能将其解析为与 JSON 通常解析它的结构相同的结构 client someone se