python3json
Ⅰ python3.0怎么用json从文件解析
1、说明:
python3通过json模块load函数来解析文件。
2、代码示例:
首先编写一个json文件j.txt,内容如下:
{"errno":1,"errmsg":"操作成功!","data":[]}
python代码如下:
importjson
withopen('j.txt','r')asfr:
o=json.load(fr)
print(o['errno'])
print(o['errmsg'])
print(len(o['data']))
输出如下:
1
操作成功!
0
3、函数说明:
load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
反序列化fp(一个.read()包含 - 支持类文件对象一个JSON文件),以一个Python对象。
object_hook是将与被调用的可选功能任何对象文本解码(一个``dict``)的结果。返回值object_hook将用来代替dict。此功能可用于实现自定义解码器(例如JSON-RPC级提示)。
object_pairs_hook是将与被调用的可选功能任何对象的结果与对的有序列表字面解码。该的返回值object_pairs_hook将用来代替dict。
此功能可用于实现依赖于定制解码器命令该键和值对被解码(例如,collections.OrderedDict会记得插入的顺序)。如果object_hook也定义了object_pairs_hook优先。
要使用自定义JSONDecoder子类,与cls指定它kwarg;否则JSONDecoder使用。
4、其它说明:
也可以使用json.loads函数来直接处理字符串,方法如下:
o=json.loads('{"errno":0,"errmsg":"操作成功!","data":[]}')
Ⅱ python中json处理
python中json文件处理涉及的四个函数json.loads()、json.mps()、json.load()、json.mp()。
1)json.mps()
将一个Python数据类型dict进行json格式的编码(字典->字符串)
eg:
age_dict = {'age1':'12', 'age2':'15'}
json_info = json.mps(age_dict)
print("json_info = {}".format(json_info))
print("json_info type = {}".format(type(json_info)))
2)json.loads()
将json格式数据转换为dict(字符串->字典)
json_age ='{"age1": "12", "age2": "15"}'
dict_age = json.loads(json_info)
print("json_age = {}".format(json_age))
print("dict_age type = {}".format(str(type(dict_age))))
3)json.load()
读取文件,将里json格式字符串转化为dict
with open(test.json, 'r') as file:
contents = json.load(file)
print(contents)
4)json.mp()
将dict类型转换为json格式字符串,存入文件
number = [1, 2, 3, 5]
file = 'number.json'
with open(file , 'w') as file:
json.mp(number, file)
Ⅲ python3 对象 |字典|json|yaml|字符串 相互转化
在研究 k8s 的yaml 配置文件的时候,我总担心自己一不小心 会写错,所以我向往 使用将对象 序列化 yaml 的形式,
其实 python object 可以 直接 转 yaml ,甚至也可以 直接 转成yaml文件!!!
这里 会经常用到几个 函数 vars() ast.
我们先尝试用最笨的方法 实现 object到yaml 的转化
在python对象 convert to dict 的形式,使用 vars()函数
然后 dict convert to json 使用 json.mps(dict)函数
然后 json converte to yaml 使用 ya= yaml.load(json.mps(dict)) 然后
再 yaml.safe_mp(ya,default_flow_style=False)
至此我们看到 从 python Object ---> dict ----> json ---> yaml 的转化
其中 obj dict json yaml 转 string ,只要 str()函数即可,或者 str(vars())结合
yaml 格式 写入到文件 ,需要注意的是, open()函数 的mode 一定要是 'w' ,不能是’wb', b代表是二进制写入
yaml 写入的是dict str,使用 ‘wb' 会报错,[yaml TypeError: a bytes-like object is required, not 'str']
【出现该错误往往是通过open()函数打开文本文件时,使用了‘rb’属性,如:fileHandle=open(filename,'rb'),则此时是通过二进制方式打开文件的,所以在后面处理时如果使用了str()函数,就会出现该错误,该错误不会再python2中出现。
具体解决方法有以下两种:
第一种,在open()函数中使用‘r’属性,即文本方式读取,而不是‘rb’,以二进制文件方式读取,可以直接解决问题。
第二种,在open()函数中使用‘rb’,可以在使用之前进行转换,有以下实例,来自: http://stackoverflow.com/questions/33054527/python-3-5-typeerror-a-bytes-like-object-is-required-not-str 】
其实 python object 可以 直接 转 yaml ,甚至也可以 直接 转成yaml文件!!!
比如我已经定义了一个 Dog python class,他有 好几个属性 并已经赋值初始化了
另外生成 yaml 对象
生成yaml文件
结果是
反过来 yaml ----> json ---> 持久化 json 文件 indent=1属性是为了让 json 不以单行展示,而是展开
注意的是 python 的 dict 和set 很相似 ,都是 { }, set 里是list, dict 是键值对
【# set object is not JSON serializable [plicate]
】
打开 demo.json
yaml ---> dict
yaml ---> python object
json --> dict
json.loads()
dict--> json
json.jumps()
str ---> dict
newdict=dict(str)
json -- > python object
一个python object无法直接与json转化,只能先将对象转化成dictionary,再转化成json;对json,也只能先转换成dictionary,再转化成object,通过实践,源码如下:
yaml --> python object
对yaml,也只能先转换成json --->dictionary,再转化成object,通过实践,源码如下:
dict -- ->python object
python对象 默认都有一个 私有的属性 dict 取值 就是 object的 字典形式, 赋值就就可以给对象属性对应赋值
例如json 转 对象
对象 转 json
Python之dict(或对象)与json之间的互相转化
在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作。
dict字典转json数据
对象转json数据
json数据转成dict字典
json数据转成对象
json的load()与mp()方法的使用
mp()方法的使用
Ⅳ python中为什么用json有什么作用
今天我也在这个问题上纠结很久。最后才想明白,我来回答下。
网上很多网友总结了json模块的用法,但没说json模块有什么用,干嘛要有这个模块。可能都明白、太简单,觉得没必要说。但作为小白的我不明白,而且在练习使用load()和mp()时遇到错误。
首先纠正,json格式不是字符串。json与python里面的字典是一样的格式。
python的json模块四个方法的作用为:
mps()#把数据转成字符串;
loads()#把字符串符号‘’去掉;
mp(x,f)#将x的内容直接写入f,不改变格式;
load(x,f)#读取f保存为x,同样不改变格式。
重点来了,f = open()下的read()的方法,输出是字符串,wirte()方法的输入也必须是字符串。
结论:因为f=open()下的读写方法都必须是字符串,很不方便。而非字符串的数据大多是json格式,所以就有了json模块。方便读写非字符串的数据。
因为这个目的,json模块的loads()和mps()方法有些鸡肋,还造成困扰,因为明明json不是字符串,干嘛要转成字符串,另外mp()和load()方法表面上和它们不一样。只有明白json模块的目的,才会搞明白。
在python 3.6的说明文档中,把json模块放在了《7.2.文件读写》部分。我也是看到这里才去练习json模块。但出问题,有些糊涂,明白json模块的作用后,才更清楚干嘛把json模块放这里。
小白的浅见,若错误请指教,谢谢。
Ⅳ python3 读excel转Json文件
from xlrd import *
import json
# 参考1-字典、列表转JSON:https://www.cnblogs.com/longchang/p/10904850.html
# 参考2-JSON直接保存到文件:https://www.cnblogs.com/miyatest/p/9603897.html
# 从excel读取数据存放到列表中
def readExcel():
keyData=[] # 定义空List,用于保存读到的行数据
excelBook=open_workbook("data.xlsx") # 从当前目录读取《data.xlsx》文件
table=excelBook.sheet_by_name("data") # 从《data.xlsx》中找名为 data的sheet页
rowNum=table.nrows # 获取《data.xlsx》-->data页中 行数
colNum=table.ncols # 获取《data.xlsx》-->data页中 列数
colName=table.row_values(0) # 取第一行数据,即列名,colName 是个List
# print(colName)
if rowNum<=1:
print("没数据...") # 如果行数<=1,说明没有数据,因第1行一般定义为列名
else:
for i in range(rowNum-1):
d={} # 定义空字典,用于存放获取到数据
values=table.row_values(i+1) # 获取每行的数据,values最终是个List
# print(values)
for x in range(colNum): # 每个列作为字典的一组数据
d[colName[x]]=values[x] # 用colName值作为字典的key,values值作业为字典的value
# print(d)
keyData.append(d) # 读完一行数据保存到字典,再保存到列表
# print(keyData)
return keyData # 全部数据读完并保存到列表后,返回
# 列表转Json
def listToJson():
keyParam=readExcel() # 调用从excel读取数据的函数,把数据保存到列表
CaseConfig=open("CaseConfig.json", mode="w+") # 创建json文件
CaseConfig.write('{\n"key":') # 往json文件中写数据,先写json的格式的{,和模块名
# 把从excel读取的数据转成Json格式保存入 CaseConfig,indent=4是进行格式化,使json排版好看
json.mp(keyParam, CaseConfig, indent=4)
CaseConfig.write('\n}') # 往json文件中写数据,写结尾的 },写前先换行
CaseConfig.close() # 关闭json文件,必要!!
if __name__ == '__main__': # 调试调用
listToJson()
Ⅵ 【Python】浅谈python中的json
一 前言
最近一直在做开发相关的工作--基于Django的web 平台,其中需要从model层传输数据到view 层做数据展示或者做业务逻辑处理。我们采用通用的Json格式--Json(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和程序解析。
二 认识Json
2.1 Json 结构
常见的Json格式为 “名称/值”对的集合,其中 值可以是对象,列表,字典,字符串等等。比如
backup_data = {"back_to_host": "dbbk0",
"ip_address": "10.10.20.3",
"host_name": "rac4",
"port": 3306}
2.2 使用Json
Python的Json模块序列化与反序列化的过程分别是 编码和解码。这两个过程涉及到两组不同的函数
编码 把一个Python对象编码转换成Json字符串,json.mps(data)/json.mp(data,file_handler)
解码 把Json格式字符串解码转换成Python对象,json.loads(data)/json.load(file_handler)
在python中要使用Json模块做相关操作,必须先导入:
import Json
2.3 主要函数
编码函数主要有 json.mps(data)/json.mp(data,file_handler)
json.mps()的参数是将python对象转换为字符串,如使用json.mps序列化的对象json_mps=json.mps({'a':1, 'b':2}) ,json_mps='{"b": 2, "a": 1}'
json.mp 是将内置类型序列化为json对象后写入文件。
解码函数主要由json.loads(data)/json.load(file_handler)
json.loads的参数是内存对象,把Json格式字符串解码转换成Python对象,json_loads=json.loads(d_json) #{ b": 2, "a": 1},使用load重新反序列化为dict
json.load()的参数针对文件句柄,比如本地有一个文件/tmp/test.json json_load=json.load(open('/tmp/test.json'))
具体案例参考如下:
In [3]: data={"back_to_host": "rac1",
...: "ip_address": "10.215.20.3",
...: "host_name": "rac3",
...: "port": 3306}
In [7]: json_str=json.mps(data)
In [8]: print json_str
{"ip_address": "10.215.20.3", "back_to_host": "rac1", "host_name": "rac3", "port": 3306}
In [9]: json_loads=json.load(json_str)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-9-180506f16431> in <mole>()
----> 1 json_loads=json.load(json_str)
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc in load(fp, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
284
285 ""
注意 从上面的报错信息来看 json.loads 传参是字符串类型,并不是文件句柄,没有 read()属性。
In [10]: json_loads=json.loads(json_str)
In [11]: print json_loads
{u'back_to_host': u'rac1', u'ip_address': u'10.215.20.3', u'host_name': u'rac3', u'port': 3306}
In [12]: type(json_loads)
Out[12]: dict
In [13]: type(json_str)
Out[13]: str
利用mp 将数据写入 mp.json
In [17]: with open('/tmp/mp.json','w') as f:
...: json.mp(json_str,f)
...:
yangyiDBA:~ yangyi$ cat /tmp/mp.json
"{\"ip_address\": \"10.10.20.3\", \"back_to_host\": \"rac1\", \"host_name\": \"rac3\", \"port\": 3306}"
yangyiDBA:~ yangyi$
利用json.load 将mp.sjon的数据读出来并赋值给 data
In [18]: with open('/tmp/mp.json','r') as f:
...: data=json.load(f)
...:
In [19]: print data
{"ip_address": "10.10.20.3", "back_to_host": "rac1", "host_name": "rac3", "port": 3306}
三 小结
本文算是一篇学习笔记,主要对比了json.loads/json.load , json.mps/ json.mp 的使用差异 ,方便以后更好的使用json 。
以上为本次分享内容,感谢观看。