Python 的 rapidjson 库处理非标准 JSON

作者: , 共 1024 字 , 共阅读 0

Python 的官方自带库json库处理 JSON 很方便,但它只支持标准的 JSON 格式。rapidjson 库来自于 json 的 C++库,速度比json库快五倍,而且支持一些非标准的 JSON 字符串。

安装:

sudo pip install python-rapidjson

它的使用和json库基本兼容:

import rapidjson

obj = rapidjson.load(open(file))
rapidjson.dump(obj, open(file, "w"))

obj = rapidjson.loads('{"a": 1}')
dump = rapidjson.dumps(obj)

但默认情况下, rapidjson 也只支持标准的 JSON 字符串。要想支持非标准 JSON ,需要提供一些参数:

rapidjson.loads(string, *, 
    object_hook=None, number_mode=None, datetime_mode=None, 
    uuid_mode=None, parse_mode=None, allow_nan=True)

这里比较关键的是parse_mode

  • rapidjson.PM_TRAILING_COMMAS :支持 dict 和 list 最后一个元素后面的逗号。
  • rapidjson.PM_COMMENTS 支持注释,注释风格是C/C++,包括单行的 // ...和多行的/* ... */

还有 number_mode

  • rapidjson.NM_NAN :支持对NaN-Infinity+Infinity的解析。等同于allow_nan=True

还有 datetime_mode支持日期时间的转发,具体可参考rapidjson.loads 的官方文档

所以我们可以用下面这个来解析非标准的 JSON 字符串:

obj = rapidjson.loads('{"a": -Infinity, }', 
    parse_mode=rapidjson.PM_TRAILING_COMMAS | rapidjson.PM_COMMENTS)

# obj = {'a': -info }

Q. E. D.

类似文章:
编程 » NaN, Python, Javascript, JSON
一般而言,在 Python 里:
编程 » django, html, http, axios
我们用访问网页动态数据时,经常会提交一些参数,比如用axios.get
主要形式是下面三种。后面两种实际指向同一个位置(如果path是一个已存在的文件夹),但处理结果会有所差异。
datetime 是 Python 的标准库:
编程 » python, requests, django
在 Python 里,我们可以用request.post提交json数据:
编程 » C++, 数据容器, folly
folly::dynamic提供类似于C++的动态类型。和std::any可以容纳任意类型不一样,folly::dynamic只支持保存以下几种类型:
安装 selenium ,使用 requestium 来调用 selenium 程序更为简单,因此可一起安装:
IT » apt, pip, python, ubuntu
正常而言,大家都是用 pip 来安装 python 的包。但有时候无意中(通常是为安装某个特定的软件,根据软件的安装提示),会使用 apt 安装 python 包。而且其实很多包都可以通过 apt 来安装的,名字就是包名再加python3-的前缀。安装后的库以及依赖项位于/usr/lib/python3/dist-packages目录下。比如 apt 安装 requests 包:
IT » ai, chatgpt, openai
https://github.com/xx025/carrot收集了一些 chatgpt 镜像站,简单试用不成问题。有些需要登录,或者免费次数受限制:
这次去西沟林场露营,顺便走了两个长城。第一天就是榆树沟长城,第二天去了蟠龙山