1

Python 的 rapidjson 库处理非标准 JSON

 1 year ago
source link: https://zhiqiang.org/coding/python-rapidjson-on-non-standard-json.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Python 的 rapidjson 库处理非标准 JSON

作者: 张志强

, 2023-03-28

, 共 1024 字 , 共阅读 15 次

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.

avatar-0.jpg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK