python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器

simplejson

Python版的简单、 快速、 可扩展 JSON 编码器/解码器

编码基本的 Python 对象层次结构:

  1. import simplejson as json
  2.  
  3. print json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
  4. print json.dumps("\"foo\bar")
  5. print json.dumps(u'\u1234')
  6. print json.dumps('\\')
  7. print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
  8. from StringIO import StringIO
  9. io = StringIO()
  10. json.dump(['streaming API'], io)
  11. io.getvalue()
  1. ["foo", {"bar": ["baz", null, 1.0, 2]}]
  2. "\"foo\bar"
  3. "\u1234"
  4. "\\"
  5. {"a": 0, "b": 0, "c": 0}

压缩编码(减少空格来节省数据传输量):

  1. import simplejson as json
  2. print json.dumps([1 , 2, 3,{'4': 5, '6': 7}], separators=(',', ':'))
  1. [1,2,3,{"4":5,"6":7}]

漂亮的输出(输出效果好看易读,但是增加了很多空格,数据量变大):

  1. import simplejson as json
  2. s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4 * ' ')
  3. print s
  1. {
  2. "4": 5,
  3. "6": 7
  4. }

解码 JSON:

  1. import simplejson as json
  2. print json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
  3. print json.loads('"\\"foo\\bar"')
  4. from StringIO import StringIO
  5. io = StringIO('["streaming API"]')
  6. print json.load(io)[0]
  1. [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
  2. "fooar
  3. streaming API

使用Decimal代替float类型:

  1. import simplejson as json
  2. from decimal import Decimal
  3. print json.loads('1.1', use_decimal=True) == Decimal('1.1')
  4. print json.dumps(Decimal('1.1'), use_decimal=True) == '1.1'

  True
  True

  1.  

json对象的解码成python对象:

  1. import simplejson as json
  2. def as_complex(dct):
  3. if '__complex__' in dct:
  4. return complex(dct['real'], dct['imag'])
  5. return dct
  6.  
  7. print json.loads('{"__complex__": true, "real": 1, "imag": 2}',
  8. object_hook=as_complex)
  1. (1+2j)

把python的对象json编码传输的json格式:

  1. import simplejson as json
  2. def encode_complex(obj):
  3. if isinstance(obj, complex):
  4. return [obj.real, obj.imag]
  5. raise TypeError(repr(o) + " is not JSON serializable")
  6.  
  7. print json.dumps(2 + 1j, default=encode_complex)
  8. print json.JSONEncoder(default=encode_complex).encode(2 + 1j)
  9. print ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
  1. [2.0, 1.0]
  2. [2.0, 1.0]
  3. [2.0, 1.0]

基本用法:

  1. def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
  2. allow_nan=True, cls=None, indent=None, separators=None,
  3. encoding='utf-8', default=None, use_decimal=True,
  4. namedtuple_as_object=True, tuple_as_array=True,
  5. bigint_as_string=False, sort_keys=False, item_sort_key=None,
  6. **kw):

将 obj 序列化为 JSON 格式流到 fp (.write ()-支持类似于文件的对象)。

如果 skipkeys 为 true (默认: False),然后词典并不是一种基本类型的键 (str,unicode、 int,长、 浮动、 bool,None) 将被跳过而不是引发 TypeError。

如果 ensure_ascii 为 false (默认: True),然后写入 fp 一些块可能是 unicode 的情况下,除正常 Python str unicode 胁迫规则。除非 fp.write() 明确地理解 unicode (如 codecs.getwriter()) 这是可能会导致错误。它最好保留默认设置,因为它们是安全的,高度优化。

如果 check_circular 为 false (默认: True),容器类型的循环引用检查将被跳过,然后循环引用会导致更糟的OverflowError 。

如果 allow_nan 为 false (默认: True),那么它将是 ValueError 来序列化超过 float范围的值 (nan,inf、-inf) 中的 JSON 规范严格遵守。如果 allow_nan 为 true,则将使用对应的 JavaScript (NaN,无穷大,无穷大)。

如果indent缩进是一个字符串,然后 JSON 数组元素和对象成员将漂亮打印与换行符,其次是对于每个级别的嵌套重复该字符串。无 (默认值) 选择没有任何换行符的最紧凑的表示形式。为后仰与 simplejson 比 2.1.0,整数早版本兼容性也可以接受,转换为字符串,与很多空格。

如果指定,分隔符应该是 (item_separator,dict_separator) 的元组。默认情况下,(',',': ') 使用。若要获取的最紧凑的 JSON 表示形式,您应指定 (',',': ') 以消除空白。
编码是字符编码为 str 实例,默认值为 ' utf-8'。
default(obj) 是 obj 的一个函数,应返回一个可序列化版本或引发 TypeError。默认值只是引发 TypeError。
若要使用一个自定义的 JSONEncoder 子类 (例如一个重写要序列化的其他类型的 default () 方法),请使用 cls kwarg 指定。
如果 use_decimal 为 true (默认值: True) 然后十进制。十进制将本机序列化为 JSON 完全精度
 
如果 namedtuple_as_object 为 true (默认: True),用 _asdict() 方法的对象将被编码为 JSON 对象。
如果 tuple_as_array 为 true (默认值: True),元组 (和子类) 将编码为 JSON 数组。
 
如果 bigint_as_string 为 true (默认值: False),int' 2 ** 53 和高于或低于-2 ** 53 将作为字符串进行编码。这是为了避免舍入,否则在 Javascript 中发生。注意此选项丢失类型信息,所以极端谨慎使用。
如果 sort_keys 为 true (False),则输出的词典将排序的关键 ;这是有用的回归测试,以确保可以将 JSON 序列在日常基础上进行比较。
如果 item_sort_key 是可调用 (False),然后输出的词典将与它进行排序。可调用将使用像这样: sorted(dct.items(),关键 = item_sort_key)。此选项将优先于 sort_keys。
 
分类: Python

python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器的更多相关文章

  1. Python系列教程-详细版 | 图文+代码,快速搞定Python编程(附全套速查表)

    作者:韩信子@ShowMeAI 教程地址:http://showmeai.tech/article-detail/python-tutorial 声明:版权所有,转载请联系平台与作者并注明出处 引言 ...

  2. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  3. Python核心编程(第二版)PDF

    Python核心编程(第二版) 目录 第1部分 Python核心第1章 欢迎来到Python世界1.1 什么是Python1.2 起源1.3 特点1.3.1 高级1.3.2 面向对象1.3.3 可升级 ...

  4. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  5. 《Python编程第4版 下》高清PDF|百度网盘免费下载|Python基础编程

    <Python编程第4版 下>高清PDF|百度网盘免费下载|Python基础编程 提取码:tz5v 当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为这 ...

  6. 《Python编程第4版 上》高清PDF|百度网盘免费下载|Python基础编程

    <Python编程第4版 上>高清PDF|百度网盘免费下载|Python基础编程 提取码:8qbi  当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为 ...

  7. 【Python大系】Python快速教程

    感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...

  8. 笨办法学 Python (第三版)(转载)

    笨办法学 Python (第三版) 原文地址:http://blog.sina.com.cn/s/blog_72b8298001019xg8.html   摘自https://learn-python ...

  9. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

随机推荐

  1. PHP开启curl_init

    windows主机出现“Call to undefined function curl_init”错误提示,没有定义的函数,也就是php还没打开对curl_init函数的支持. 全文:http://j ...

  2. AngularJS中自定义过滤器

    AngularJS中为我们提供了一些内置的过滤器,这里列举一些自定义过滤器的场景. 自定义过滤器,不带参赛 //过滤 不带参赛 app.filter('ordinal', function () { ...

  3. frame与bounds的区别比较

    翻译文档上的
bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小
区别主要在坐标系这一块.

很明显一个是自己为原点的坐标 ...

  4. C#编程(四十二)----------委托和事件

    委托和事件 委托是C#总比较重要的概念,学习C#爱这里最容易产生迷惑. 有些时候,犹豫我们在开发程序时对后续可能出现的要求及变化考虑不足而导致麻烦,这些新变化可能导致程序的重新编写,那能不能改变这种情 ...

  5. HTML5学习笔记简明版(8):新增的全局属性

    contenteditable属性 不论什么元素使用contenteditable属性的话,代表该元素是一个可编辑的区域. 用户能够改变元素的内容以及操作标记.比如: <p contentedi ...

  6. SQL:获取中文周几

    ) = case DatePart(DW, GetDate()) then '周日' then '周一' then '周二' then '周三' then '周四' then '周五' then '周 ...

  7. USB OTG简单介绍、与普通USB线的差别

    USB有三类接口A类接口                     -----------最常见的扁平接口,四芯  VCC   GND   D+   D- B类接口                    ...

  8. Android系统版本与API等级对应关系表

    从Android官网拷过来的,方便查阅... 官网地址:https://developer.android.com/guide/topics/manifest/uses-sdk-element.htm ...

  9. 虚拟私有云(Virtual Private Cloud,专有网络)配置方式总结

    虚拟私有云 虚拟私有云(Virtual Private Cloud)是用户在云上申请的隔离的.私密的虚拟网络环境.用户可以自由配置VPC内的IP地址段.子网.安全组等子服务,也可以申请弹性带宽和弹性公 ...

  10. iOS:自定义导航栏,随着tableView滚动显示和隐藏

    自定义导航栏,随着tableView滚动显示和隐藏 一.介绍 自定义导航栏是APP中很常用的一个功能,通过自定义可以灵活的实现动画隐藏和显示效果.虽然处理系统的导航栏也可以实现,但是这个是有弊端的,因 ...