用于python的超高速json编解码器
ujson-bedframe的Python项目详细描述
ultra json是一个超高速的json编码器和解码器,用纯c编写,绑定python 2.5+和3。
<> P>一个更加无痛的日常C/C++ JSON解码器体验请基于UpjJSON签出ujson4c。要安装它,只需像往常一样运行pip:
$ pip install ujson
用法
可以作为python的大多数其他json解析器的替换:
>>> import ujson >>> ujson.dumps([{"key": "value"}, 81, True]) '[{"key":"value"},81,true]' >>> ujson.loads("""[{"key": "value"}, 81, true]""") [{u'key': u'value'}, 81, True]
编码器选项
编码HTML字符
用于将“不安全”HTML字符特殊编码为更安全的Unicode序列。默认值为false:
>>> ujson.dumps("<script>John&Doe", encode_html_chars=True) '"\\u003cscript\\u003eJohn\\u0026Doe"'
确保使用ascii
将输出限制为ascii并转义127以上的所有扩展字符。默认值为true。如果您的终端格式支持utf-8,强烈建议将此选项设置为false以节省空间:
>>> ujson.dumps(u"\xe5\xe4\xf6") '"\\u00e5\\u00e4\\u00f6"' >>> ujson.dumps(u"\xe5\xe4\xf6", ensure_ascii=False) '"\xc3\xa5\xc3\xa4\xc3\xb6"'
双精度
控制要为双精度值或十进制值编码的小数位数。默认值为9:
>>> ujson.dumps(math.pi) '3.1415926536' >>> ujson.dumps(math.pi, double_precision=1) '3.1' >>> ujson.dumps(math.pi, double_precision=0) '3' >>> ujson.dumps(math.pi, double_precision=4) '3.1416'
解码器选项
精确浮点值
设置为在将字符串解码为双倍值时启用更高精度(strTod)函数。默认设置是使用快速但不太精确的内置功能:
>>> ujson.loads("4.56")
4.5600000000000005
>>> ujson.loads("4.56", precise_float=True)
4.5599999999999996
基准
ultrajson调用/秒,与其他三个流行的json解析器相比,每种解析器的性能都有所提高。
试验机:
Linux版本2.6.32-131.0.15.el6.x86_64
版本:
- ujson:1.21
- simplejson:2.6.2
- 中日韩:1.05
- yajl:0.3.5
- Python:Python2.6.6(r266:842922011年7月20日,10:22:43)
ujson | simplejson | cjson | yajl | |
---|---|---|---|---|
Array with 256 utf-8 strings | ||||
Encode | 4090,74 | 899,39 | 83,86 | 3189,86 |
4,55 | 48,78 | 1,28 | ||
Decode | 863,29 | 586,15 | 201,61 | 352,48 |
1,47 | 4,28 | 2,45 | ||
Medium complex object | ||||
Encode | 9750,37 | 1377,15 | 1512,06 | 3341,91 |
7,08 | 6,45 | 2,92 | ||
Decode | 5576,75 | 4247,16 | 3587,83 | 2850,13 |
1,31 | 1,55 | 1,96 | ||
Array with 256 strings | ||||
Encode | 17998,01 | 12954,46 | 8715,02 | 15924,35 |
1,39 | 2,07 | 1,13 | ||
Decode | 14540,71 | 19696,13 | 14908,46 | 9547,14 |
0,74 | 0,98 | 1,52 | ||
Array with 256 doubles | ||||
Encode | 2185,20 | 1466,87 | 1956,99 | 3421,10 |
1,49 | 1,12 | 0,64 | ||
Decode | 16062,01 | 8990,50 | 9743,40 | 8331,74 |
1,79 | 1,65 | 1,93 | ||
Array with 256 True values | ||||
Encode | 69767,60 | 25202,56 | 41145,99 | 64330,76 |
2,77 | 1,70 | 1,08 | ||
Decode | 91416,02 | 56439,97 | 54918,09 | 42786,02 |
1,62 | 1,66 | 2,14 | ||
Array with 256 dict{string, int} pairs | ||||
Encode | 11307,54 | 1830,45 | 2720,90 | 7725,56 |
6,18 | 4,16 | 1,46 | ||
Decode | 8695,94 | 7572,89 | 6076,71 | 5231,32 |
1,15 | 1,43 | 1,66 | ||
Dict with 256 arrays with 256 dict | ||||
Encode | 37,76 | 4,88 | 10,49 | 27,62 |
7,74 | 3,60 | 1,37 | ||
Decode | 17,70 | 15,56 | 11,25 | 12,00 |
1,14 | 1,57 | 1,47 |