活动地址:优快云21天学习挑战赛
学习日记
学习知识点
XML文件和JSON文件互转、解析json文件:100天精通Python(进阶篇)——第35天:json标准库大总结_无 羡ღ的博客-优快云博客
1、XML文件和JSON文件互转
【前置条件】cmd控制台安装第三方模块:pip install xmltodict
1.1 XML文件转为JSON文件
思路:获取到XML文件,读取文件的内容(字符串),将内容转换为JSON格式,输出JSON文件。
# xml文件
<note date="23/04/2022">
<to>tom</to>
<from>mary</from>
<msg>love</msg>
</note>
# 转换
import json
import xmltodict
def xml_to_json(xml_str):
"""parse是的xml解析器,参数需要
:param xml_str: xml字符串
:return: json字符串
"""
xml_parse = xmltodict.parse(xml_str)
# json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。
# dumps()方法的ident=1,格式化json
json_str = json.dumps(xml_parse, indent=1)
return json_str
XML_PATH = './1.xml' # xml文件的路径
with open(XML_PATH, 'r') as f:
xmlfile = f.read()
with open(XML_PATH[:-3] + 'json', 'w') as newfile:
newfile.write(xml_to_json(xmlfile))
1.2 JSON文件转为XML文件
思路:获取到JSON文件,读取文件的内容(转换为python内置对象),将内容转换为XML格式,输出XML文件。
# json文件
{
"student": {
"course": {
"name": "math",
"score": "90"
},
"info": {
"sex": "male",
"name": "name"
},
"stid": "10213"
}
}
# 转换
import xmltodict
import json
def json_to_xml(python_dict):
"""xmltodict库的unparse()json转xml
:param python_dict: python的字典对象
:return: xml字符串
"""
xml_str = xmltodict.unparse(python_dict)
return xml_str
JSON_PATH = './test.json' # json文件的路径
with open(JSON_PATH, 'r') as f:
jsonfile = f.read()
python_dict = json.loads(jsonfile) # 将json字符串转换为python字典对象
with open(JSON_PATH[:-4] + 'xml', 'w') as newfile:
newfile.write(json_to_xml(python_dict))
2、解析json文件
2.1 解析json字符串
思路:将json字符串转换为python内置对象,定位具体的数据节点
# 解析
import json
json_str = '{"name":"test", "type":{"name":"seq", "parameter":["1", "2"]}}'
print(json_str)
print(type(json_str))
print('-' * 20)
# 1、JSON文件转换为Python对象
python_obj = json.loads(json_str)
print(python_obj)
print(type(python_obj))
print('-' * 20)
# 2、定位具体的数据节点
print(python_obj.keys())
print(python_obj.values())
print(python_obj["name"])
print(python_obj["type"]["name"])
print(python_obj["type"]["parameter"][0])
print(python_obj["type"]["parameter"][1])
#输出
{"name":"test", "type":{"name":"seq", "parameter":["1", "2"]}}
<class 'str'>
--------------------
{'name': 'test', 'type': {'name': 'seq', 'parameter': ['1', '2']}}
<class 'dict'>
--------------------
dict_keys(['name', 'type'])
dict_values(['test', {'name': 'seq', 'parameter': ['1', '2']}])
test
seq
1
2
2.2 解析json文件
思路:读取json文件(转换为python内置对象),定位具体的数据节点
# json文件
{
"student": {
"course": {
"name": "math",
"score": "90"
},
"info": {
"sex": "male",
"name": "name"
},
"stid": "10213"
}
}
# 解析
import json
# 1、JSON文件转换为Python对象
python_obj = json.load(open('test.json', 'r'))
print(python_obj)
print(type(python_obj))
print("-" * 20)
# 2、解析json文件
# 输出cours节点e下的数据
print(python_obj['student']['course']['name']) # 输出name
print(python_obj['student']['course']['score']) # 输出score
# 输出info节点下的数据
print(python_obj['student']['info']['sex']) # 输出sex
print(python_obj['student']['info']['name']) # 输出name
# 输出stid节点下的数据
print(python_obj['student']['stid']) # 输出stid
# 输出
{'student': {'course': {'name': 'math', 'score': '90'}, 'info': {'sex': 'male', 'name': 'name'}, 'stid': '10213'}}
<class 'dict'>
--------------------
math
90
male
name
10213
学习遇到的问题
最大的问题就是,看过了就当作会了,其实不然。很多时候都是这样眼高手低,实践出真知,动手才是硬道理。还是要尽快把本地环境搭好,把代码跑跑看。
学习的收获
了解到json相关文件的处理方法,包含XML文件和JSON文件互转以及JSON文件的解析。
实操
暂无,本周找时间把本地环境搭一下,跑跑看。