Python JSON和XML使用总结

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Python JSON和XML使用总结

一、JSON基础知识

1、json解释

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,目前使用特别广泛。


采用完全独立于编程语言的文本格式来存储和表示数据。

简洁和清晰的层次结构使得JSON成为理想的数据交换语言。

易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

2、json语法

格式:{“key1”:“value1”,“key2”:“value2”} 键值对形式存储

简单案例:

{
  "name": "天天",
  "age": 18
}

复杂案例:

{
  "name": "天天",
  "age": 18,
  "score": [
    {
      "math": 95
    },
    {
      "chinese": 88
    }
  ]
}

3、数据类型转换

Python转Json对应表

b33490904384fa02bd0c5fa559c945b.png

Json转Python对应表

1901afe6db77205eff0f00a9eb4a167.png


4、使用方法

1)Json字符串生成Python对象用load方法

2)Python字符串生成Json对象用dump方法

01f4e773be84555710cb0e4dd6cb24a.png


5、json.dump()和json.dumps()使用

1)json.dumps()

语法格式:dict->str转化

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

obj:转化成json的对象。 sort_keys

=True:是告诉编码器按照字典排序(a到z)输出。如果是字典类型的python对象,就把关键字按照字典排序。

indent:参数根据数据格式缩进显示,读起来更加清晰。

separators:是分隔符的意思,参数意思分别为不同dict项之间的分隔符和dict项内key和value之间的分隔符,把:和,后面的空格都除去了。

skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key。

ensure_ascii=True:默认输出ASCLL码,如果把这个该成False,就可以输出中文。

check_circular:如果check_circular为false,则跳过对容器类型的循环引用检查,循环引用将导致溢出错误(或更糟的情况)。 allow_nan:如果allow_nan为假,则ValueError将序列化超出范围的浮点值(nan、inf、-inf),严格遵守JSON规范,而不是使用JavaScript等价值(nan、Infinity、-Infinity)。

default:default(obj)是一个函数,它应该返回一个可序列化的obj版本或引发类型错误。默认值只会引发类型错误。

39120366a4bb3c66cb0ffecb9ec2e64.png

import json
student = {
    "name": "刘刚",
    "age": 10,
    "score": [{"math": 95}, {"chinese": 88}]
}
print(student)  #原始输出
print(type(student))
print('=' * 100)
stu_dump = json.dumps(student)
print(stu_dump) #默认输出
print('=' * 100)
#key-value之间的分隔符":",每个key-value之间的分割用","  separators里面用的是单引号
stu_dumps = json.dumps(student, indent=4, separators=('-', '::'))
print(type(stu_dumps))
print(stu_dumps)

2)json.dump() 用的相对来说比较少

语法格式:


json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
  • obj 是一个Python可序列化对象,你希望将其转换为JSON格式。
  • fp是一个文件指针,用于将 JSON 格式的数据写入文件。Python json 模块总是产生字符串对象,而不是字节对象,因此,fp.write()必须支持字符串输入。
  • 如果skipkeys为真(默认值:假),则不属于基本类型的字典键 (str, int, float, bool, None) 将被跳过而不是引发一个 TypeError。例如,如果你的字典键之一是自定义 Python 对象,则在将字典转换为 JSON 时将省略该键。
  • 如果ensure_ascii为 true(默认值),则保证输出所有传入的非 ASCII 字符都已转义。如果ensure_ascii为 false,这些字符将按原样输出。
  • allow_nan默认情况下为 True,因此将使用它们的 JavaScript 等效项(NaN、Infinity、-Infinity)。如果为 False,则序列化超出范围的浮点值(nan、inf、-inf)将是一个 ValueError。
  • indent参数用于漂亮地打印 JSON 以使其更具可读性。默认值为(', ', ‘: ‘). 要获得最紧凑的 JSON 表示,你应该使用(’,’, ‘:’) 消除空格。
  • 如果sort_keys为真(默认:假),则字典的输出将按键排序。

3)json.dump()和json.dumps()区别

json.dumps() 是把python对象转换成json对象的一个过程,生成的是字符串。

json.dump() 是把python对象转换成json对象生成一个fp的文件流,和文件相关。

把字典存到文件dump();把字典存储到数据库或Excel文档需要dumps()把字典转换成字符串,在写入

bd907ca6f9d4872addf6a2a32c0a295.png

 
         
import json
student = {
    "name": "刘刚",
    "age": 10,
    "score": [{"math": 95}, {"chinese": 88}]
}
json.dump(student,open('./student.json','w'))
print('=' * 100)
with open('./students.json','w') as fp:
    fp.write(json.dumps(student))

 

6、json.load()和json.loads()

1)json.loads()

语法:str->dict转化

json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)


  • fp 用于读取包含 JSON 文档的文本文件、二进制文件或 JSON 文件的文件指针。
  • object_hook 是可选函数,将使用任何对象文字解码的结果调用。Python 内置的 json 模块只能处理具有直接 JSON 等效项的原语类型(例如,字典、列表、字符串、数字、无等)。但是当你想将 JSON 数据转换成自定义的 Python 类型时,我们需要实现自定义解码器并将其作为对象传递object_hook给一个load()方法,这样我们就可以获得自定义的 Python 类型而不是字典。
  • object_pairs_hook 是一个可选函数,它将使用任何对象字面量的结果调用,该结果是用有序的对列表解码的。object_pairs_hook 将使用的返回值 代替 Python 字典。此功能还可用于实现自定义解码器。如果 object_hook 也定义了, object_pairs_hook 则优先。
  • parse_float 是可选参数,但如果指定,将使用要解码的每个 JSON 浮点数和整数的字符串调用。默认情况下,这等效于float(num_str)。
  • parse_int 如果指定,它将使用要解码的每个 JSON int 的字符串调用。默认情况下,这等效于int(num_str).

c1fe2f8a1b6774c1acfc527d1514007.png

解析写法一

import json
student = """{
    "name": "刘刚",
    "age": 10,
    "score": [{"math": 95}, {"chinese": 88}]
}
"""
jsonloads = json.loads(student)
print(jsonloads["name"])
print(jsonloads["age"])
print(jsonloads["score"])

解析写法二 可以解析json文件的值

import json
student = {
    "name": "刘刚",
    "age": 10,
    "score": [{"math": 95}, {"chinese": 88}]
}
jsondumps = json.dumps(student)
jsonloads = json.loads(jsondumps)
print(jsonloads["name"])
print(jsonloads["age"])
print(jsonloads["score"])

读取文件:

 
         
with open('data.json') as f:
    print(json.loads(f.read()))

2)json.load()

语法:参数参照json.loads()

json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

读取文件:

335b413464b113129039c819ba7ddac.png

import json
python_obj = json.load(open('data.json','r'))
print(python_obj)

3)json.load()和json.loads()区别

json.load:表示读取文件,返回python对象

json.loads:将json字符串转换为字典类型,返回python对象 [str→dict]

总结:

json.load:表示读取文件,返回python对象

json.dump:表示写入文件,文件为json字符串格式,无返回

json.dumps:将python中的字典类型转换为字符串类型,返回json字符串 [dict→str]

json.loads:将json字符串转换为字典类型,返回python对象 [str→dict]

load和dump处理的主要是 文件

loads和dumps处理的是 字符串


json.load()从json文件中读取数据

json.loads()将str类型的数据转换为dict类型

json.dumps()将dict类型的数据转成str

json.dump()将数据以json的数据类型写入文件中


二、XML的使用

pip install xmltodict

遇到报pip升级错误看这篇文章:WARNING: You are using pip version 21.2.3

https://editor.csdn.net/md/?articleId=126156593

原始xml文件:

<site>
  <name>xxx</name>
  <url>https://www.xxx.com</url>
  <logo>xxx.png</logo>
  <desc>编程学习网站</desc>
</site>

1、xml解析成json代码:

import xmltodict
import json
def xml_json(xml_str):
    xml_parse = xmltodict.parse(xml_str)
    json_str = json.dumps(xml_parse, indent=4)
    return json_str
XML_PATH = 'test.xml'
with open(XML_PATH, 'r') as f:
    xmlfile = f.read()
    with open(XML_PATH[:-3] + 'json', 'w', encoding='utf-8') as newfile:
        newfile.write(xml_json(xmlfile))

解析成json结果:


{
    "site": {
        "name": "xxx",
        "url": "https://www.xxx.com",
        "logo": "xxx.png",
        "desc": "\u7f02\u682b\u25bc\u701b\ufe3f\u7bc4\u7f03\u6220\u73ef"
    }
}

2、把json解析成xml:

import xmltodict
import json
def json_xml(python_dict):
    xml_str = xmltodict.unparse(python_dict)
    return xml_str
JSON_PATH = 'test.json'
with open(JSON_PATH, 'r') as f:
    jsonfile = f.read()
    python_dict = json.loads(jsonfile)
    with open(JSON_PATH[:-4] + 'xml', 'w') as newfile:
        newfile.write(json_xml(python_dict))
相关文章
|
24天前
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
16 1
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
2月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
280 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
2月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
53 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
2月前
|
存储 Python
Python:利用XML-RPC实现简单的远端过程调用
Python:利用XML-RPC实现简单的远端过程调用
16 1
|
2月前
|
JSON 数据格式 Python
Python编程:利用JSON模块编程验证用户
Python编程:利用JSON模块编程验证用户
29 1
|
3月前
|
JSON API 数据格式
使用Python发送包含复杂JSON结构的POST请求
使用Python发送包含复杂JSON结构的POST请求
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
528 0
|
2月前
|
存储 JSON 数据格式
Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
41 0