[JSON] JSON基础知识
创始人
2024-01-20 04:40:43

JSON(JavaScript Object Notation,JavaScript对象表简谱)是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据

JSON文件的文件类型是.json

JSON是纯文本,具有层级结构,易于阅读和编写,其本质是字符串

JSON语法

语法规则

1.数据在名称/值对中

2.数据由逗号 , 分隔

3.使用斜杆 \ 来转义字符

4.大括号 {} 保存对象

5.中括号 [] 保存数组,数组可以包含多个对象

JSON名称/值对 

key : value

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值 

"name" : "Andy"

提示Tips

JSON值可以包括如下类型:

1.数字(整数或浮点数)

2.字符串(在双引号""中)

3.逻辑值(true 或 false)

4.数组(在中括号[]中)

5.对象(在大括号{}中)

6.null

JSON对象

JSON对象在大括号 {} 中书写,对象可以包含多个key/value(键/值)对

key必须是字符串,value可以是合法的JSON数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)

大括号 {} 保存的对象是一个无序的名称/值对集合

一个对象以左括号 { 开始, 右括号 } 结束,每个"键"后跟一个冒号 :,名称/值对使用逗号 ,分隔

JSON对象格式

{key1 : value1, key2 : value2, ... key(N) : value(N)}

JSON对象实例

{ "userId":12 }{ "flag":true }{ "runoob":null }{ "name":"Andy", "city":"GuangZhou",  "university":"Dalian Maritime University"}

JSON对象中可以包含另外一个JSON对象 

{"name":"Andy","city":"GuangZhou","info": {"blog":"https://blog.csdn.net/Hudas","university":"Dalian Maritime University"}
}

JSON数组 

JSON数组在中括号 [] 中书写,数组可包含多个对象

中括号 [] 保存的数组是值(value)的有序集合

JSON中数组值必须是合法的JSON数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)

一个数组以左中括号 [ 开始, 右中括号 ] 结束,值之间使用逗号 , 分隔

提示Tips

值(value)可以是双引号括起来的字符串(string)、数值(number)、布尔值(true或false)、 null、对象(object)或者数组(array),它们是可以嵌套

JSON数组格式

[{ key1 : value1-1 , key2:value1-2 }, { key1 : value2-1 , key2:value2-2 }, { key1 : value3-1 , key2:value3-2 }, ...{ key1 : valueN-1 , key2:valueN-2 }, 
]

JSON数组实例

{"name":"网站","num":3,"sites":[ "Google", "Baidu", "Taobao" ]
}
{"info": [{ "name":"Andy" , "city":"GuangZhou" }, { "name":"Jack" , "city":"ShenZhen" }, { "name":"Summer" , "city":"ShangHai" }]
}

在上面的例子中,对象info是包含三个对象的数组,每个对象代表一条关于某个用户信息(name、city)的记录 

JSON对象中数组可以包含另外一个数组,或者另外一个JSON对象

{"name":"网站","num":3,"sites": [{ "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻译" ] },{ "name":"Baidu", "info":[ "Baidu 搜索", "Baidu 地图" ] },{ "name":"Taobao", "info":[ "淘宝", "网购" ] }]
}

Python使用JSON实现序列化和反序化 

通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(列表、字典、元组等)就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到本地文件里

Python内置的json模块提供了非常完善的Python对象到JSON格式的转换 

使用JSON实现序列化

file = open(r'C:\Users\X2001565\Desktop\demo.txt','w')
names = ['Andy','Jack','Lee','Rita','Bob','Harry','Ruby']
# 报错,不能直接将列表写入到文件里
# TypeError: write() argument must be str, not list
file.write(names)

将上述代码进行修改

import json
file = open(r'C:\Users\X2001565\Desktop\demo.txt','w')
names = ['Andy','Jack','Lee','Rita','Bob','Harry','Ruby']# 调用json的dumps方法,传入一个对象参数
result = json.dumps(names)# dumps方法得到的结果是一个字符串
print(type(result)) # # 将字符串写入到文件里
file.write(result)file.close()

打开'demo.txt'文件

json.dumps方法的作用是把对象转换成为字符串(可理解为将Python对象编码成JSON字符串),它本身不具备将数据写入到文件的功能 

提示Tips

json.dump方法可以在将对象转换成为字符串的同时,指定一个文件对象,把转换后的字符串写入到这个文件里

import json
file = open(r'C:\Users\X2001565\Desktop\newdemo.txt','w')
names = ['Abc','Bcd','Cde','Def','Efg']
# dump方法可以接收一个文件参数,在将对象转换成为字符串的同时写入到文件里
json.dump(names,file)
file.close()

Python使用JSON实现反序列化

json.loads方法需要一个字符串参数,用来将一个字符串加载成为Python对象(可理解为将已编码的JSON字符串解码为Python对象)

import json
# 调用loads方法,传入一个字符串,可以将这个字符串加载成为Python对象
result = json.loads('["Andy","Jack","Lee","Rita","Bob","Harry","Ruby"]')
# 
print(type(result))

json.load方法可以传入一个文件对象,用来将一个文件对象里的数据加载成为Python对象

import json
# 以可读方式打开一个文件
file = open(r'C:\Users\X2001565\Desktop\demo.txt','r')
# 调用load方法,将文件里的内容加载成为一个Python对象
result = json.load(file)
# ['Andy', 'Jack', 'Lee', 'Rita', 'Bob', 'Harry', 'Ruby']
print(result)
file.close()

扩展补充:JSON和Python内置的数据类型对应如下所示

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
苁蓉的食用方法 鲜苁蓉的吃法有... 肉苁蓉号称“温而不热,补而不峻,暖而不燥,滑而不泄,故有从容之名。”历来也是传统药食同源的滋补佳品。...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...