python修改json对象的值_pythonjson怎么修改json数据
展开全部
Json简介:Json,全名 JavaScript Object Notation,是⼀
32313133353236313431303231363533e4b893e5b19e31333363393564种轻量级的数据交换格式。Json最⼴泛的应⽤是作为AJAX中web服务器和客户端的通讯的数据格式。现在也常⽤于http请求中,所以对json的各种学习,是⾃然⽽然的事情。Python的官⽹⽹址:/2/library/json.html?highlight=json#module-json
Json API 使⽤:python在版本2.6之前,是需要先下载包,安装后才能使⽤的,有点类似现在的RF内使⽤SeleniumLibrary⼀样。但是在2.6中,官⽅⽂档(/2.6/whatsnew/2.6.html)明显指出,“有⼀些重要的新的软件包添加到了标准库,⽐如multiprocessing 和json,但是跟python 3⽐,2.6的这些包不会引进更多的新功能。"于是安装python2.6以上版本的童鞋,可以不需要下载json包,直接在所需的地⽅就import json 即可使⽤,在安装⽬录下的Lib 下,看到这两个包(点进去仔细阅读这些源码,会有更多的收获,)如下⽂所⽰:
Python2.6 以上版本⽀持Json的编码和解码,⽀持python的⼤部分内置类型与Json进⾏转换。最简单的例⼦如下所⽰:
>>> import json>>> data = {"spam" : "foo", "parrot" : 42}>>> in_json = json.dumps(data) # Encode the data>>> in_json'{"parrot": 42, "spam": "foo"}'>>> json.loads(in_json) # Decode into a Python object{"spam" : "foo", "parrot" : 42}
Encode过程,是把python对象转换成json对象的⼀个过程,常⽤的两个函数是dumps和dump函数。两个函数的唯⼀区别就是dump把python对象转换成json对象⽣成⼀个fp的⽂件流,⽽dumps则是⽣成了⼀个字符串:
其他参数的使⽤都是⼀样的。以下是部分学习的代码⽚段:
dic1 = {'type':'dic1','username':'loleina','age':16}python软件下载
json_dic1 = json.dumps(dic1)less文件和css文件
print json_dic1
json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="gbk",ensure_ascii=True )
print json_dic2
运⾏结果如下所⽰:
如果把实例中的key'username'的value换成中⽂的“测试”,则⽤第⼀次不加参数转换则会报错,但是⽤第⼆个加参数的就能正常运⾏。实际上就是对函数的参数的⼀个理解过程,下⾯列出⼏个常⽤的参数:
harmonious怎么记Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显⽰数据,设置成False后,就能正常显⽰
indent:应该是⼀个⾮负的整型,如果是0,或者为空,则⼀⾏显⽰数据,否则会换⾏且按照indent的数量显⽰前⾯的空⽩,这样打印出来的json数据也叫pretty-printed json
separators:分隔符,实际上是(item_separator, dict_separator)的⼀个元组,默认的就是(',',':');这表⽰dictionary内keys之间
⽤“,”隔开,⽽KEY和value之间⽤“:”隔开。
encoding:默认是UTF-8,设置json数据的编码⽅式。
sort_keys:将数据根据keys的值进⾏排序。
visio导出矢量图Decode过程,是把json对象转换成python对象的⼀个过程,常⽤的两个函数是loads和load函数。区别跟dump和dumps是⼀样的。
if __name__ == '__main__':
# 将python对象test转换json对象
test = [{"username":"测试","age":16},(2,3),1]
print type(test)
python_to_json = json.dumps(test,ensure_ascii=False)
print python_to_json
print type(python_to_json)
# 将json对象转换成python对象
json_to_python = json.loads(python_to_json)jsondecodeerror猫和老鼠
print json_to_python
print type(json_to_python)
运⾏结果如下:
从上⾯2个例⼦的测试结果可以看到,python的⼀些基本类型通过encode之后,tuple类型就转成了list类型了,再将其转回为python对象时,list类型也并没有转回成tuple类型,⽽且编码格式也发⽣了变化,变成了Unicode编码。具体转化时,类型变化规则如下所⽰:
Python-->Json
Json-->Python
Json处理中⽂问题:
关于python字符串的处理问题,如果深⼊的研究下去,我觉得可以写2篇⽂章了(实际上⾃⼰还没整很明⽩),在这⾥主要还是总结下使⽤python2.7.11处理json数据的问题。前期做接⼝测试,处理最多的
事情就是,把数据组装成各种协议的报⽂,然后发送出去。然后对返回的报⽂进⾏解析,后⾯就遇到将数据封装在json内嵌⼊在http的body内发送到web服务器,然后服务器处理完后,返回json数据结果的问题。在这⾥⾯就需要考虑json⾥有中⽂数据,怎么进⾏组装和怎么进⾏解析,以下是基础学习的⼀点总结:
python解析json文件第⼀:Python 2.7.11的默认编码格式是ascii编码,⽽python3的已经是unicode,在学习编解码的时,有出现乱码的问题,也有出现list 或者dictionary或者tuple类型内的中⽂显⽰为unicode的问题。出现乱码的时候,应该先看下当前字符编码格式是什么,再看下当前⽂件编码格式是什么,或者没有设置⽂件格式时,查看下IDE的默认编码格式是什么。最推崇的⽅式当然是每次编码,都对⽂件编码格式进⾏指定,如在⽂件前 设置# coding= utf-8。
第⼆:字符串在Python内部的表⽰是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另⼀种编码。decode的作⽤是将其他编码的字符串转换成unicode编码,如
str1.decode('gb2312'),表⽰将gb2312编码的字符串str1转换成unicode编码。encode的作⽤是将unicode编码转换成其他编码的字符串,如de('gb2312'),表⽰将unicode编码的字符串str2转换成gb2312编码。因此,转码的时候⼀定要先搞明⽩,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码
第三:将json数据转换成python数据后,⼀般会得到⼀个dict类型的变量,此时内部的数据都是unicode编码,所以中⽂的显⽰看着很痛苦,但是对于dict得到每个key的value后,中⽂就能正常显⽰了,如下所⽰:
# coding= utf-8import json
import sysif __name__ == '__main__':
# 将python对象test转换json对象
test = {"username":"测试","age":16}
print type(test)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论