用于python的超高速json编码器和解码器(internet archive fork)

ujson-ia的Python项目详细描述


https://travis-ci.org/internetarchive/ultrajson.svg?branch=master

关于这个叉子

我们在互联网档案馆使用这个版本。我们已经合并了@vdmit11从https://github.com/dignio/ultrajson到上游master的最新更改,并可能继续进行其他调整。

要安装:

$ pip install ujson-ia

回到您定期安排的自述文件

ultra json是一个超高速的json编码器和解码器,用纯c编写,绑定python 2.5+和3。

对于一个更加无痛的日常C/C++ JSON解码器经验,请基于UpjJSON检查{A3}。

使用量

可以作为python的大多数其他json解析器的替换:

>>>importujson>>>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"'
向前逃逸切口

控制是否转义正斜杠(/)。默认值是True

>>>ujson.dumps("http://esn.me")'"http:\/\/esn.me"'>>>ujson.dumps("http://esn.me",escape_forward_slashes=False)'"http://esn.me"'
缩进

控制是否启用缩进(“漂亮的输出”)。默认值是0(禁用):

>>>ujson.dumps({"foo":"bar"})'{"foo":"bar"}'>>>ujson.dumps({"foo":"bar"},indent=4){"foo":"bar"}
预编码挂钩

允许为每个已编码的python对象提供一个调用的自定义函数。

钩子函数的语义类似于标准的jsonencoder.default()方法, 但是,在任何其他序列化尝试之前调用pre_encode_hook(),而 当所有其他选项都不起作用时调用default()。

允许重写已存在的行为并定义自定义序列化的 日期之类的格式。例如:

# Default behavior: datetime is converted to timestamp
>>> ujson.dumps({"a": "foo", "b": datetime.now()})
'{"a":"foo","b":1454523657}'

# Hook is involved: the datetime object is replaced with the .isoformat() string
>>> def hook(obj):
        return obj.isoformat() if hasattr(obj, 'isoformat') else obj

>>> ujson.dumps({"a": "foo", "b": datetime.now()}, pre_encode_hook=hook)
'{"a":"foo","b":"2016-02-03T18:21:55.351081"}'

钩子可用于在 编码它。但是,它不会取消所有进一步的编码转换。 例如,如果从钩子返回datetime对象而不是字符串, 它将被转换为时间戳。

预编码原语

指示还应调用pre_encode_hook()的布尔标志 对于序列化为原始json类型的python对象(数字、字符串, 布尔值,空)。

通常不需要为这些文件定义任何特殊的序列化格式 类型,因此默认情况下标志为false。

启用此标志可能会产生大量的pre_encode_hook()调用(即 钩子将为每个json值调用),从而影响性能。

解码器选项
精确浮动

设置为在将字符串解码为双倍值时启用更高精度(strTod)函数。默认设置是使用快速但不太精确的内置功能:

>>> ujson.loads("4.56")
4.5600000000000005
>>> ujson.loads("4.56", precise_float=True)
4.5599999999999996
对象挂钩

在json对象解码后调用的自定义python函数。

钩子语义类似于标准的jsondecoder.object_hook()行为。 您可以使用它将字典(解码的json对象)转换为more 特定对象。

例如:

>>> def hook(obj):
        if '__complex__' in obj:
            return complex(obj['real'], obj['imag'])
        return obj

>>> ujson.loads('{"__complex__": true, "real": 1, "imag": 2}', object_hook=hook)
(1+2j)
弦钩

类似于object_hook,但对每个解码字符串都调用。

用于从文本表示中反序列化对象(如日期),例如:

>>> def hook(s):
        if s.startswith('__DATE'):
            return datetime.strptime(s, '__DATE: %Y-%m-%d')
        return s

>>> ujson.loads('{"a": "foo", "b": "__DATE: 2016-01-01"}', string_hook=hook)
{'a': 'foo', 'b': datetime.datetime(2016, 1, 1, 0, 0)}

基准

ultrajson调用/秒,与其他三个流行的json解析器相比,每种解析器的性能都有所提高。

试验机:

Linux 3.13.0-66-generic x86_64 108 ubuntu smp 10月7日星期三15:20:2015年协调世界时27日

版本:

  • CPython 2.7.6(默认值,2015年6月22日,17:58:13)[GCC 4.8.2]
  • blist:1.3.6
  • SimpleJSON:3.8.1
  • ujson:1.34(0c52200eb4e2d97e548a765d5f089858c41967b0)
  • yajl:0.3.5
{T1}$

版本:

  • CPython 3.4.3(默认值,2015年10月14日,20:28:29)[GCC 4.8.4]
  • blist:1.3.6
  • SimpleJSON:3.8.1
  • ujson:1.34(0c52200eb4e2d97e548a765d5f089858c41967b0)
  • yajl:0.3.5
{t2}$

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java RFID不完整输出?   java如何构造一个for循环来查找每个数组的第一个索引的总和   java Eclipse AST解析器正在删除我的规则   安卓如何在java中创建“可重写”配置?   java每次我向应用程序添加图像时,它都会崩溃   Java 8流到文件   EntityNotFoundException的java可能原因   java多线程为什么下面的程序表现得如此怪异?   java footprint soap api+mavenjaxb2plugin   java MongoDB锁定,直到找到结果   java重写Jtable选项卡行为转到下一个可编辑单元格   java关于方法和创建另一个方法   java将人脸与图像分离   java复制Spring批处理作业实例   java TextView不会更改为新设置的文本