simplejson

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

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

import simplejson as jsonprint 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 dctprint 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,整数早版本兼容性也可以接受,转换为字符串,与很多空格。

如果指定,分隔符应该是 (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。

转载于:https://www.cnblogs.com/ankier/archive/2012/12/25/2833037.html

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

  1. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用四:图像损痕修复

    教程: 博主之前写了24节关于使用OpenCV的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

  2. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用二:物体检测

    教程: 博主之前写了22节关于使用OpenCV的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

  3. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用一:快速截取图像中指定单个物体

    教程: 博主之前写了21节关于使用Opencv的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

  4. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用三:物体运动跟踪

    教程: 博主之前写了23节关于使用OpenCV的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

  5. python的图形界面库wxpython的快速简单使用

    简介 使用python来写小型软件简便而且快速,为其添加界面则是必不可小的.现在说一下wxpython的使用. wxpython是一个第三方的库,可以编写任意复杂的界面,但是对于刚入门的新手来说,如何 ...

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

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

  7. python快速编程入门黑马-新手如何快速入门Python编程?/开发python入门教程

    Python从入门到实践的教程是什么? 第一阶段Python与Linux数据这是Python的入段,也是帮助零基础学员打好基础的重要阶段,让零基础学员可以具备基础的编程能力,并掌握MySQL进阶内容. ...

  8. python自助电影售票机_手把手教你用python抢票回家过年(代码简单)

    首先看看如何快速查看剩余火车票? 当你想查询一下火车票信息的时候,你还在上12306官网吗?或是打开你手机里的APP?下面让我们来用Python写一个命令行版的火车票查看器, 只要在命令行敲一行命令就 ...

  9. python自学教程-python怎么快速自学?

    学习python也有一段时间了,各种相关的课程,资料也看了不少,谈谈对编程语言学习的理解. 其实Python入门并不难,只要你有足够的自信心,明确学习目标,循序渐进就能不断享受到python带给你创新 ...

最新文章

  1. 2013年工作中遇到的20个问题:181-200
  2. UDP千兆以太网FPGA_verilog实现(一、知识搜集)
  3. Oracle442个应用场景-----------Oracle数据库物理结构
  4. KAFKA介绍(分布式架构)
  5. Redis-ha(sentinel)搭建
  6. tcp连接测试工具_“国货之光”!国产弱网测试神器 QNET,比主流弱网测试工具强在哪?...
  7. redhat solutions
  8. android3d画廊自动切换,Android viewpager 3D画廊的实现方法
  9. 前端和python哪个工资高_前端和后端哪个工资高
  10. 使用CCRenderTexture来创建动态纹理
  11. cpc按点击计算怎么算_亚马逊CR怎么算?亚马逊CR及CTR计算公式介绍
  12. Pytho学习(3)——注释
  13. Web 开发项目的6个最佳Java框架
  14. 曾国藩:一勤天下无难事
  15. 相机标定(三)——手眼标定
  16. v-show和v-if
  17. autobank渗流分析计算教程_实例分析Autobank在小型水库土石坝渗流稳定计算中的运用...
  18. 电磁炮程序(电子设计大赛)
  19. 【ERP】ERP,MRP和MRPII的关系是怎样的?(20年3月29日第二章学习笔记)
  20. linux使用域名访问web网站

热门文章

  1. 浅析网站seo诊断都包括哪些内容?
  2. 浅析网站建设的基本原则
  3. 浅析搜索引擎对网站的抓取规则有哪些方面
  4. python字符串大写字母个数_python判断字符串是字母 数字 大小写(转载)
  5. linux卸载netbeans,如何清除NetBeans中的缓存
  6. python deque的内在实现 本质上就是双向链表所以用于stack、队列非常方便
  7. 最小哈希 minhash
  8. mysql text 不可指定默认值
  9. Xcode:dyld: Library not loaded: @rpath/libswiftAVFoundation.dylib
  10. FreeSWITCH 学习笔记(一)