Python 的 rapidjson 库处理非标准 JSON
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.
Python 的 rapidjson 库处理非标准 JSON
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.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK