当前位置:首页>python>《零基础Python成长日记》第9篇:JSON与XML格式

《零基础Python成长日记》第9篇:JSON与XML格式

  • 2026-08-22 23:50:18
《零基础Python成长日记》第9篇:JSON与XML格式

本文将介绍 Python 中JSON与XML格式,JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)都是用于结构化数据表示、存储和传输的格式。

1

   JSON文件

JSON 全称:JavaScript Object Notation(JavaScript 对象表示法),是一种轻量级的文本数据交换格式。

一个典型的 JSON 格式的字符串如下:

{"students":     [        { "name":"张三" , "age": 15 },         { "name":"李四" , "age": 16 },         { "name":"王五" , "age": 17 }    ]}

JSON 中数据都以名称:值的形式表示,名称包括在一对双引号" "中,值则有多种形式,多条数据之间用逗号,隔开,比如:

"name":"张三""name":"张三","age":15

这种表示方式与 Python 的dict类似。

1

数据类型

JSON 的值可以是如下类型:

  • 字符串(在双引号中)

  • 数字(整数或浮点数)

  • 逻辑值(true 或 false)

  • 数组(在中括号中)

  • 对象(在大括号中)

  • null

比如:

"name":"张三" , "age":15 , "weight":50 , "ismale" : false 

2

数组

JSON 的数组用一对方括号[]表示,类似于list,数组元素用逗号,隔开,元素值可以是任意 JSON 数据类型,比如:

"names":["张三","李四","王五"]"ages":[15,16,17]

3

对象

JSON 的对象用一对大括号{}表示,类似于dict,对象可以拥有多个名称/值 对,名称/值 对用逗号,隔开,比如:

"first":{ "name":"张三" , "age": 15 }

4

json库

json库是 Python 内置的一个用于操作 JSON 数据的库,提供了几个函数用于解析与生成(或者说反序列化与序列化)JSON 格式的数据。

  1. 解析JSON数据(JSON数据对象类型变为Python基础数据类型)

json库提供了一个函数loads,用于从 Python 的字符串中解析 JSON 数据。使用它的方法很简单,只需将含有 JSON 数据的字符串当做参数传递给它,它的返回值就是由 Python 中的基础数据类型组成的对象。

import jsondata = '{"a":1,"b":2,"c":3,"d":4,"e":5}';text = json.loads(data)print(text)

得到的结果是:

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

JSON 的对象类型转换成了 Python 的dict类型。

JSON 各种数据类型在解析后,对应的 Python 基础数据类型如下表:

JSONPython
object(对象)dict
array(数组)list
string(字符串)unicode
number (int)int, long
number (real)float
trueTrue
falseFalse
nullNone

JSON 数据类型转化成 Python 数据类型后,就可以按照 Python 的方式来使用了:

import jsondata = '[1,2,3]';text = json.loads(data)text.append(4) #调用list的append函数print(text)

得到的结果是:

[1, 2, 3, 4]

如果需要以不同的字符编码来解析,可以指定encoding参数,比如:

import jsondata = '{"a":1,"b":2,"c":3,"d":4,"e":5}';text = json.loads(data,encoding = "utf-8")print(text)

上面的代码以utf-8的字符编码,解析data字符串的数据。

注意:如果字符编码指定错误,有可能会导致解析失败,引发异常。

  1. 生成JSON数据(将对象转换为JSON数据类型)

与解析的那两个函数相对应,json库也提供了两个函数:dumps和dump,来将由 Python 基础数据类型组成的对象转化成 JSON 数据,使用方法也类似:

import jsondata = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]json = json.dumps(data) #转化成JSON格式的字符串print(json)

得到的结果是:

[{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]

这是一个字符串

同样,在转化的时候,也有一个 Python 基础数据类型到 JSON 数据类型的对应表格:

PythonJSON
dictobject(对象)
list,tuplearray(数组)
str,unicodestring(字符串)
int, long,floatnumber (int)
Truetrue
Falsefalse
Nonenull

注意:dumps函数没有可选参数encoding,当要转化的对象含有中文等非 ASCII 字符时,建议指定可选参数ensure_ascii为False。否则非 ASCII 的字符将会被显示成\uXXXX的形式:

data = {"name":"小明"}print(json.dumps(data)) #ensure_ascii默认值为Trueprint(json.dumps(data,ensure_ascii= False)) #指定ensure_ascii为False

上面的代码的结果:

{"name": "\u5c0f\u660e"}{"name": "小明"}

使用dump函数直接输出到文件也很简单,只需多传递一个文件对象作为参数。

import jsonfp = open("test.txt","w")data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]json.dump(data,fp) #转化成JSON格式的字符串后输出到文件fp.close()

test.txt文件的内容:

[{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]

dump函数同样没有可选参数encoding,如果有数据中有中文字符等非 ASCII 字符时,建议指定可选参数ensure_ascii为False。

2

XML格式

XML 全称可扩展标记语言(EXtensible Markup Language),是一种用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型。

一个典型的 XML 文件结构如下:

<?xml version="1.0" encoding="UTF-8"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

1

XML的声明

XML文档的声明是可选的,如果需要声明,需要将其放在文档的第一行最顶端

<?xml version="1.0" encoding="UTF-8"?>

以上定义了 XML 的版本1.0和所使用的编码utf-8。

2

元素

XML 元素指的是 XML 文件中出现的标签,一个标签分为开始标签和结束标签,结束标签与开始标签名称相同,只是要在前面加一个斜杠/,比如:

<hello></hello><to></to>

一个标签中也可以嵌套其他的若干个子标签。但所有的标签必须合理的嵌套,绝不允许交叉嵌套,比如:

<student>    <name>张三</name>    <age>16</age></student>

以上是一个正确嵌套的例子。

格式良好的 XML 文档必须有且仅有一个根元素,其他的元素都是这个元素的子孙元素。

元素的命名规则:

  • 名称可以包含字母、数字以及其他的字符

  • 名称不能以数字或者标点符号开始

  • 名称不能以字母 xml(或者 XML、Xml 等等)开始

  • 名称不能包含空格

  • 名称是大小写敏感的

XML 没有保留字,元素名称可以任意使用。

【示例】:

<hello></hello><F12></F12><if></if><!--上面这些都是合理的名称--><!--下面这些都是不合理的名称--><.123></.123><AD></A D><hello></Hello> <!-- 这一个是因为开始标记(hello)和结束标记(Hello)名称不同 -->

3

属性

一个元素可以有多个属性,每个属性都有它自己的名称和取值。同一个元素下,属性名称不能重复。属性的值一定要用双引号或者单引号括起来,比如:

<date year="2018" month="7" day="28"></date>

以上是一个格式正确的例子。

属性的命名规范和元素的命名规范一样。

4

2

注释

XML 文件中注释采用:<!--注释内容--> 这样的格式,注释没有结束标签,不能嵌套。举例如下:

<!--一个正确的注释1--><hello><!--一个正确的注释2--></hello><!--<!--一个发生嵌套的错误的注释-->-->
感谢大家阅读到这里!希望大家都有所收获!
如果需要合适的使用Markdown语法记笔记的软件,我使用的是GitHub+Typora,可以看我之前的文章分享~零基础Python成长日记》第1篇:使用合适软件记录学习笔记
和大家一样,我也是Python学习路上的探索者,之前的文章记录过一些Python的基础语法知识和学习笔记,虽不完善但若您正好需要,随时欢迎取用参考,可点击下方传送门~:
Python的基础语法:《零基础Python成长日记》第2篇:Python基础语法与字符串
Python的标准数据类型:《零基础Python成长日记》第3篇:Python标准数据类型:列表、元组、字典(接上一篇)
Python的三大结构:《零基础Python成长日记》第4篇:Python的三大结构
Python的函数和模块:《零基础Python成长日记》第5篇:调用Python函数和模块

Python 的类:《零基础Python成长日记》第6篇:一文搞懂 Python 中类的定义、继承与三大方法(实例/类/静态)

Python的正则表达式:《零基础Python成长日记》第7篇:Python对字符串操作的正则表达式

Python对文件的读写操作:《零基础Python成长日记》第8篇:Python对文件进行读取写入

我期待和大家一起交流进步!最后想了解更多JSON和XML格式的内容可以在菜鸟教程中进行探索,我放在原文链接里啦!

最新文章

随机文章