活动地址:CSDN21天学习挑战赛
基础
JSON(全名:JavaScript Object Notation 对象表示法)是一种轻量级的文本数据交换格式,和python中的字典格式很像。
JSON是独立于语言存在的,比XML更小,是爬虫中经常遇到的接口数据格式
格式
语法格式:{key1:value1, key2:value2,} 键值对形式(用冒号分开),对间用逗号连接
- json的键值对的键部分,必须用双引号"包裹,单引号都不行(所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)。
- json的键值对的值部分,不允许出现函数function,undefined,NaN,但是可以有null
- json数据结束后,不允许出现没有意义的逗号
json模块
带s和字符相关,不带s和文件相关
json.load
:使用json字符串生成python对象
json.dump
:python对象格式化为json字符串
json格式和Python格式的区别在于:python格式打印输出是单引号,类型为dict。而json格式打印输出是双引号,类型为:str
使用参数能让JSON字串格式化输出
>>> print(json.dumps(person, sort_keys=True, indent=4, separators=('!', '-')))
{
"age"-30!
"isonly"-true!
"name"-"\u5c0f\u660e"!
"tel"-[
"888888"!
"1351111111"
]
}
参数:
sort_keys:是否排序
indent:定义缩进距离
separators:是一个元组,定义分隔符的类型
skipkeys:是否允许JSON字串编码字典对象时,字典的key不是字符串类型(默认是不允许)
dump和dumps区别
dump将python数据类型转换并保存到son格式的文件内。
import json
person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
json.dump(person, open('data.json', 'w'))
dumps要写入,就得额外操作
import json
person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
jsonStr = json.dumps(person)
with open('test.json', 'w', encoding='utf-8') as f: # 打开文件
f.write(jsonStr) # 在文件里写入转成的json串
json.loads:将json格式的字符串转换为python的类型。
json.load:从json格式的文件中读取数据并转换为python的类型。
import json
python_obj = json.load(open('data.json','r'))
print(python_obj)
print(type(python_obj))
print(python_obj.keys())
print(python_obj.values())
print(python_obj["name"])
XML文件和JSON互转
安装第三方模块pip install xmltodict
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))
反之
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))