python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器
python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器
simplejson
Python版的简单、 快速、 可扩展 JSON 编码器/解码器
编码基本的 Python 对象层次结构:

import simplejson as json
print json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
print json.dumps("\"foo\bar")
print json.dumps(u'\u1234')
print json.dumps('\\')
print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
from StringIO import StringIO
io = StringIO()
json.dump(['streaming API'], io)
io.getvalue()

["foo", {"bar": ["baz", null, 1.0, 2]}]
"\"foo\bar"
"\u1234"
"\\"
{"a": 0, "b": 0, "c": 0}
压缩编码(减少空格来节省数据传输量):
import simplejson as json
print json.dumps([1 , 2, 3,{'4': 5, '6': 7}], separators=(',', ':'))
[1,2,3,{"4":5,"6":7}]
漂亮的输出(输出效果好看易读,但是增加了很多空格,数据量变大):
import simplejson as json
s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4 * ' ')
print s
{
"4": 5,
"6": 7
}
解码 JSON:

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

[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
"fooar
streaming API
使用Decimal代替float类型:

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

json对象的解码成python对象:

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

(1+2j)
把python的对象json编码传输的json格式:

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

[2.0, 1.0]
[2.0, 1.0]
[2.0, 1.0]
基本用法:

def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
encoding='utf-8', default=None, use_decimal=True,
namedtuple_as_object=True, tuple_as_array=True,
bigint_as_string=False, sort_keys=False, item_sort_key=None,
**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,整数早版本兼容性也可以接受,转换为字符串,与很多空格。
python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器的更多相关文章
- Python系列教程-详细版 | 图文+代码,快速搞定Python编程(附全套速查表)
作者:韩信子@ShowMeAI 教程地址:http://showmeai.tech/article-detail/python-tutorial 声明:版权所有,转载请联系平台与作者并注明出处 引言 ...
- Python之路,Day4 - Python基础4 (new版)
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- Python核心编程(第二版)PDF
Python核心编程(第二版) 目录 第1部分 Python核心第1章 欢迎来到Python世界1.1 什么是Python1.2 起源1.3 特点1.3.1 高级1.3.2 面向对象1.3.3 可升级 ...
- 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录
目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...
- 《Python编程第4版 下》高清PDF|百度网盘免费下载|Python基础编程
<Python编程第4版 下>高清PDF|百度网盘免费下载|Python基础编程 提取码:tz5v 当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为这 ...
- 《Python编程第4版 上》高清PDF|百度网盘免费下载|Python基础编程
<Python编程第4版 上>高清PDF|百度网盘免费下载|Python基础编程 提取码:8qbi 当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为 ...
- 【Python大系】Python快速教程
感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...
- 笨办法学 Python (第三版)(转载)
笨办法学 Python (第三版) 原文地址:http://blog.sina.com.cn/s/blog_72b8298001019xg8.html 摘自https://learn-python ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
随机推荐
- 利用kettle组件导入excel文件到数据库
利用kettle组件导入excel文件到数据库 1. 实现目标 把excel文件内容导入到目标表中:然后用java调用kettle的转换.excel文件的内容仅仅有两列,示比例如以下: wat ...
- Android笔记之属性动画
前言.动画分类 例如以下图所看到的,Android的动画主要分为三种: 以下首先说说 属性动画 所谓属性动画-- 就是指对象的属性值发生了变化,如控件位置和透明度等. 举例,如今要实现一个按键先下移. ...
- 娓娓道来c指针 (7)指针运算
(7)指针运算 在前几篇文章中,我们已经见过指针运算的使用场景,并多次使用指针运算来进行验证. 这里我们来特别地总结下.指针运算的本质含义. 在c语言中.如果p.pa.pb都是某种类型的指针,这种运算 ...
- 基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(2)
作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台 tiny4412 ADK Linux-4.9 概述 前面一篇博文基於tiny4412的Linux內核移 ...
- AngularJS使用ngMessages进行表单验证
名称为"ngMessages"的module,通过npm install angular-messages进行安装.在没有使用ngMessages之前,我们可能这样写验证: < ...
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(1)
chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...
- 使用SQL Database Migration Wizard把SQL Server 2008迁移到Windows Azure SQL Database
本篇体验使用SQL Database Migration Wizard(SQLAzureMW)将SQL Server 2008数据库迁移到 Azure SQL Database.当然,SQLAzure ...
- Delphi XE 6,Rad Studio XE 6 官方下载(附破解)
官方光盘镜像下载: http://altd.embarcadero.com/download/radstudio/xe6/delphicbuilder_xe6_win.iso RAD Studio ...
- Java String练习题及答案
1. 编写程序将 “jdk” 全部变为大写,并输出到屏幕,截取子串”DK” 并输出到屏幕 /** * 编写程序将 “jdk” 全部变为大写,并输出到屏幕,截取子串”DK” 并输出到屏幕 */ publ ...
- BZOJ 3172 [Tjoi2013]单词 AC自己主动机(fail树)
题意:链接 方法:AC自己主动机与fail树性质 解析:复习AC自己主动机的第一道题?(真正的第一题明明是又一次写了遍hdu2222! ) 这题说实话第一眼看上去就是个sb题,仅仅要建出来自己主动机. ...