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.