python操作json(一)
- 2020 年 1 月 6 日
- 筆記
Python 操作json Json语法规则: 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 Json字符串本质上是一个字符串,用单引号表示
Json数据的书写格式 名称–值对,包括名称字段(在双引号中),后面跟一个冒号,然后是值: “name”: ”zhangsan” 等价于name = “zhangsan” Json值 值可以是 数字(整数或浮点数) 字符串(双引号括起来) 逻辑值(true或false) 数组(在方括号中) 对象(在花括号中) null Json对象 Json的对象是在大括号中的, {“name”:”zhangsan”,”age”:20} 等价 name=”zhangsan” age = 20
Json数组 Json数组是在中括号中的,数组可以包含多个对象 { "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] } Employees是包含三个对象的数组
编码Json.dumps() 将一个python对象编码成json字符串,
Python的列表转换成json数组
json.dumps([1,2,3,"a"]) '[1, 2, 3, "a"]'
Python的字符串转换成json字符串
json.dumps("abc123") '"abc123"'
Python元组转换成json数组
json.dumps((1,2,3,"a","b")) '[1, 2, 3, "a", "b"]'
Python的字典转换成json的对象
json.dumps({1:"a",2:"b",3:"c"}) '{"1": "a", "2": "b", "3": "c"}'#注意1、2、3被加上了双引号,因为json的名称是必须要加双引号的
Python的数字(long型)转换成json的数字
json.dumps(13L) '13'
Python的数字(int)转换成json的数字
json.dumps(13) '13'
Python的unicode字符串转换成json的字符串
json.dumps(u"abC") '"abC"'
Python的True转换成json的true
json.dumps(True) 'true'
Python的False转换成json的false
json.dumps(False) 'false'
Python的None转换成json的null
json.dumps(None) 'null' type(json.dumps("abc"))#json本质上是一个字符串 <type 'str'>
怎么判断一个json 是不是合法的? 用try except try: json.loads('"abc"') except Exception,e: print e else: print "ok"
json.dumps()函数参数应用 sort_keys 是否按key排序,sort_keys = True升序排序
#coding=utf-8 import json data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 }] print json.dumps(data) print json.dumps(data, sort_keys=True)
indent 设置参数缩进显示的空格数。缩进显示使读起来更加清晰。 #coding=utf-8 import json data = [{"a": "A", "b": [2, 4], "c": 3.0}] print json.dumps(data, sort_keys=True, indent=3)
Separators 参数的作用是去掉逗号“,”和分号“:”后面的空格,从上面的输出果都能看到“,”与“:”后面都有个空格,这都是为了美化输出结果的作用,但是在我们传输数据的过程中,越精简越好,冗余的东西全部去掉,因此就可以加上separators参数对传输的json串进行压缩。该参数是元组格式的 import json data = [{"a": "A", "b": [2, 4], "c": 3.0}] print len(json.dumps(data)) 去掉编码后的json串中,和:后面的空格 print len(json.dumps(data, separators=(',',':')))
skipkeys 在encoding过程中,dict对象的key只可以是基本数据类型(str,unicode,int,long,float,bool,None),如果是其他类型,那么在编码过程中就会抛出TypeError的异常。skipkeys可以跳过那些非string对象的key的处理,就是不处理 import json data= [ { 'a':'A', 'b':(2, 4), 'c':3.0, (1,2):'D tuple' } ] print u"不设置skipkeys 参数" try : res1 = json.dumps(data) #skipkeys参数默认为False时 except Exception, e: print e
print u"设置skipkeys 参数" print json.dumps(data, skipkeys=True)