活动地址:CSDN21天学习挑战赛
JSON: JavaScript Object Notation(JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。JSON比 XML 更小、更快,更易解析。且易于人阅读和编写。
下面看一下json是什么样子。
{
"sites": [
{ "name":"菜鸟教程" , "url":"www.runoob.com" },
{ "name":"google" , "url":"www.google.com" },
{ "name":"微博" , "url":"www.weibo.com" }
]
}
以上代码以及介绍取自菜鸟教程
json中有两个主要的数据类型—对象和数组
。还有其他的常见数据类型:字符串(string)、数值(number)、true、false、 null。
在json的对象中,存储数据的方式就是键值对
。即key:value
的形式。key
必须是字符串,value
则可以是其他任何合法的json数据类型,包括数组和对象。
先介绍对象和数组:
- 对象:
在json中,对象就是一对大括号
{}
括起来的数据。一个对象中可以包含多个键值对来描述这一对象的性质,对象中的不同键值对之间用,
分隔。键值对
即key:value
的形式。key
必须是字符串,value
则可以是其他任何合法的json数据类型,包括数组和对象。需要注意的是,键值对不是一种数据类型,它只能出现在对象当中。示例如下:
{ "name": "王二狗", "age": 30 } // 由于值可以是任何数据类型,所以这里就可以进行对象的嵌套,如下: { "name": "王二狗", "age": 30, "friend": { "name": "张三", "age": 20, } }
- 数组:数组使用
[]
来表示,用来存储值的有序集合。这里的值可以是任何合法的json数据类型。这里要注意,数组中的元素可以为不同数据类型。["Google", "Runoob", "Taobao"] //由于值是任意类型,所以就可以对数据进行嵌套 [ { "name": "张三", "age": 20, }, { "name": "王二狗", "age": 30, }, [1, 2] ]
主要是掌握两个函数的调用。json.dumps()
,json.loads()
。
json.dumps()
:用于将 Python 对象编码成 JSON 字符串。
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)
import json
data = [ {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5}]
data2 = json.dumps(data)
print(type(data2))
print(data2)
运行结果如下:
<class 'str'>
[{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
有时,我们的json数据中会有中文,这个时候就要注意了,`json.dumps()`默认是以`ASCII`来编码。
data = [
{
"name": "张三",
"age": 20
},
{
"name": "王二狗",
"age": 30
}
]
data2 = json.dump2(data)
print(data2)
#运行结果如下:
[{"name": "\u5f20\u4e09", "age": 20}, {"name": "\u738b\u4e8c\u72d7", "age": 30}]
如何解决呢?将`json.dumps()`的`ensure_ascii`参数设置为`False`。即`json.dumps(data, ensure_ascii=False)`。
# 修改后的结果
[{"name": "张三", "age": 20}, {"name": "王二狗", "age": 30}]
其他的一些参数:`indent=None`,这个是指定缩进的空格数,`sort_keys=False`,这个控制是否对键进行排序。
示例:
import json
data = {'b': 2, 'c': 3, 'a': 1}
data2 = json.dumps(data, indent=4, sort_keys=True)
print(data2)
运行结果如下:可以看到,json对象中,键值对的顺序发生了改变,并且有了缩进。
{
"a": 1,
"b": 2,
"c": 3
}
json.loads()
:这个方法就是将json字符串对象转换为python中的数据类型。
示例:这个方法一般不需要设置其他参数,直接使用即可,如果有需要可以查阅相关资料。
import json
data_str = '{"name": "Ruby"}'
data = json.loads(data_str)
print(type(data))
print(data)
#输出结果如下:
<class 'dict'>
{'name': 'Ruby'}
解码时:
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true | True |
false | False |
null | None |
编码时:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
json — JSON encoder and decoder — Python 3.10.6 documentation
(6条消息) 100天精通Python(进阶篇)——第35天:json标准库大总结_无 羡ღ的博客-CSDN博客
https://www.runoob.com/json/json-tutorial.html