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":[ "淘宝", "网购" ] }]
}

读取JSON文件

假设我们有一个名称为name.json的文件如下所示

{"name":"Andy", "age":18, "home":"Guangzhou"}

通过key来读取Json中对应的value

import jsonwith open('name.json','r',encoding='utf-8') as f:obj = json.load(f)print(type(obj))        # <class 'dict'>print(obj["name"])      # Andyprint(obj["age"])       # 18print(obj["home"])      # Guangzhouf.close()

写入JSON文件

创建一个类似Json的数据,并写入到hobby.json文件中

import jsondicts = {}
dicts["name"] = "Andy"
dicts["hobbys"] = ["football", "table tennis", "swimming", "badminton"]with open('hobby.json', 'w', encoding='utf-8') as f:json.dump(dicts, f)f.close()

可以看到会生成一个hobby.json

{"name": "Andy", "hobbys": ["football", "table tennis", "swimming", "badminton"]}

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)) # <class 'str'># 将字符串写入到文件里
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"]')
# <class 'list'>
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内置的数据类型对应如下所示

Python字典与Json相互转换

json.dumps()可以将字典转为JSON字符串

import json# 初始化一个字典数据
dict_ = {'name': 'Andy', 'age': 18, 'skills': ['Python', 'SQL', 'Power BI', 'Kettle'], 'major': '信息管理与信息系统','gender': '男','school': 'DMU'
}json_dict1 = json.dumps(dict_)
# {"name": "Andy", "age": 18, "skills": ["Python", "SQL", "Power BI", "Kettle"], "major": "\u4fe1\u606f\u7ba1\u7406\u4e0e\u4fe1\u606f\u7cfb\u7edf", "gender": "\u7537", "school": "DMU"}
print(json_dict1)json_dict2 = json.dumps(dict_, indent=2, sort_keys=True, ensure_ascii=False)
'''
{"age": 18,"gender": "男","major": "信息管理与信息系统","name": "Andy","school": "DMU","skills": ["Python","SQL","Power BI","Kettle"]
}
'''
print(json_dict2)

json.loads()可以将json字符串转化成字典

dict_from_json1 = json.loads(json_dict1)
# {'name': 'Andy', 'age': 18, 'skills': ['Python', 'SQL', 'Power BI', 'Kettle'], 'major': '信息管理与信息系统', 'gender': '男', 'school': 'DMU'}
print(dict_from_json1)dict_from_json2 = json.loads(json_dict2)
# {'age': 18, 'gender': '男', 'major': '信息管理与信息系统', 'name': 'Andy', 'school': 'DMU', 'skills': ['Python', 'SQL', 'Power BI', 'Kettle']}
print(dict_from_json2)

[JSON] JSON基础知识相关推荐

  1. JSON入门基础知识

    2019独角兽企业重金招聘Python工程师标准>>> JSON入门基础 1.JSON定义 JSON:JavaScript 对象表示法(JavaScript Object Notat ...

  2. npm package.json 文件基础知识

    前言:package.json文件是Node.js生态系统的核心,是了解和使用Node.js,npm甚至现代JavaScript的基本部分. 它是应用程序.模块.npm引入包等的清单. name 是p ...

  3. json数据格式基础知识

    一,json简介: JSON的全称为JavaScript object Notation(JavaScript对象表示法).JSON基于JavaScript对象字面量.是一种对象表示法,可用于不同平台 ...

  4. JSON解析基础使用知识-Java

    JSON解析基础使用知识 JSON格式 假设我们定义一本书 一本书有他的书名和内容,那么JSON数据如下 {"name":"诗经","info&quo ...

  5. 【java json基础】字符串转json json转字符串 json数组转换 【java基础知识】【实用】【一看就会】

    原文:[java json基础]字符串转json json转字符串 json数组转换 [java基础知识][实用][一看就会] 读书就是:从薄读厚,再从厚读薄的过程. 文比较长,各讲述如下: 若是新手 ...

  6. (javascript)(基础知识+实例) 15.JSON,对象克隆,正则表达式

    JSON格式 本质上是一个字符串 带有一定格式字符串 作用: 通用的数据类型 在前后端数据交互的过程一种通用的数据格式,这种格式前端可以识别,后端也是可以识别的. JSON的文件格式 *.json 格 ...

  7. Json学习总结(4)——Json基础知识回顾

    一.什么是JSON? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation); JSON 是轻量级的文本数据交换格式; JSON 具有自我描述性,更 ...

  8. php json入门,JSON基础知识

    什么是JSON?JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation); JSON 是轻量级的文本数据交换格式; JSON 具有自我描述性,更易理解 ...

  9. 视频教程-JSON入门基础视频课程-Java

    JSON入门基础视频课程 Java讲师,多年培训经验,曾参与开发过的项目:某省电信ODS系统.电信自助取数系统.CRM客户关系管理系统.环境应急信息系统.自来水客服系统等.熟练掌握J2EE平台开发技能 ...

最新文章

  1. 二分图 ---- 树的二分图性质 2020icpc 济南 J Tree Constructer(构造)
  2. m4a录音文件损坏修复_电脑录音软件哪个好?分享这款录音软件,供你参考!
  3. Angularjs 如何在 post 请求时去掉因 ng-repeat 产生的 $$hashkey?
  4. 使用Boxfuse轻松在云中运行Spring Boot应用程序
  5. MariaDB 10 Slave Crash-Safe需转为GTID复制模式
  6. python时间格式化代码_Python代码中如何将”日期时间”格式化为自己所需的样式呢?...
  7. 听商业领袖揭秘大数据新动态
  8. 携程状告去哪儿一案有猫腻
  9. [转]JavaScript程序编码规范
  10. 斐波那契数列的Python简单实现
  11. python与anaconda安装
  12. 烽火通信力推SDN技术在网络中实现
  13. cocos2d-x 3.2 之 三消类游戏——万圣大作战
  14. 微软预览word_如何解决Microsoft Word中的打印问题
  15. Mac菜鸟必备小工具- Mounty 原生支持 NTFS 读写驱动应用
  16. html5 发送邮件,【JS】使用 Emailjs 发送邮件
  17. html tr隐藏 边框存在,CSS 设置tr的边框
  18. download sources报错: Cannot connect to the Maven process. Try again later. If the problem persists
  19. JAVAWEB开发之——Linux命令实战、虚拟机和centos的安装以及联网、常用命令、vi编辑以及软件的安装、sftp的使用
  20. MoviePy - 中文文档4-MoviePy实战案例-重新构建15世纪舞蹈视频

热门文章

  1. CSS用flex布局两端对齐,列不满左对齐
  2. jitpack.io 无法访问或下载依赖库
  3. 机房气体灭火防护改造
  4. COLLATE utf8_general_ci;是什么意思?
  5. 2021-03-17T23:47:55.978+08:00 UTC时间转换
  6. 当今中华之教育改革势在必行矣!
  7. C语言读写ini、json、csv文件
  8. 今天看了NES游戏,哈哈,感觉又回到了童年,可是我已经长大了
  9. 2021年终总结,我躺平了
  10. compatible