Python--JSON基础

目录

1.基本介绍

1.1相关知识

1.2解析 JSON 数据

1.3从文件解析JSON数据

1.4生成 JSON 数据

2.案例分析 

2.1案例介绍

 2.2原理分析

2.3代码展示 


1.基本介绍

1.1相关知识

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

1.2解析 JSON 数据

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

import json
data = '{"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 json
data = '[1,2,3]';
text = json.loads(data)
text.append(4) #调用list的append函数
print(text)

得到的结果是:[1, 2, 3, 4] 

1.3从文件解析JSON数据

JSON 库的另一个函数 load 也是用于解析 JSON 数据的,它与 loads 函数唯一不同的地方在于,它是从文件中解析,比如: 

import json
data = open("test.txt","r",encoding = "utf-8")
text = json.load(data) #将文件对象传递给load函数
print(text)
fp.close()

这样 test.txt 文件内的内容,就会被当做 JSON 格式的数据来解析。

注意:load 函数没有可选参数 encoding ,只要文件对象使用了正确的字符编码打开文件,load 函数就可以正确的解析数据。 

1.4生成 JSON 数据

与解析的那两个函数相对应,json 库也提供了两个函数:dumpsdump ,来将由 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}]

 注意:这是一个字符串

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

2.案例分析 

2.1案例介绍

有一个字符编码为 utf-8 的数据文件 step2/2017.txt : 

{"count":3 ,
"infos":
[
{"name":"赵昊" , "age":15 ,"height": 1.83, "sex" : "男性" },
{"name":"龙傲天" , "age":16 ,"height": 2.00, "sex" : "男性"},
{"name":"玛丽苏" , "age":15 ,"height": 1.78, "sex" : "女性"}
]
}

将其按 JSON 格式解析后,将 infos 数组内的三个对象的年龄 age 增加一岁,然后增加一条记录:

  • 名称:叶良辰,年龄:17,身高:1.87,男性

同时,将 count 的值从3改为4

注意:所有打开的文件,请在打开文件的函数内及时关闭,以免影响测试代码读取数据。

以 JSON 格式解析 step2/2018.txt 的内容,并将其中的数据打印出来。 如果内容成功解析,并且数据填写正确,将会有如下结果输出: 

学生数:4

名称:赵昊,年龄:16,身高:1.83,男性

名称:龙傲天,年龄:17,身高:2.00,男性

名称:玛丽苏,年龄:16,身高:1.78,女性

名称:叶良辰,年龄:17,身高:1.87,男性

 2.2原理分析

该题首先让我们将JSON数据转化为Python数据进行操作,利用load函数操作之后他会转换成一个大的字典(dict),字典名为obj,字典内还有一个键值对{“count”:3},和一个名为infos的大的列表,该列表内含有三个小字典,修改键值对直接赋值即可,修改列表内嵌套的字典,直接用下表+key即可,增加列表元素用append()函数,记得增加字典。

2.3代码展示 

import jsondef Func():data = open("step2/2017.txt","r",encoding = "utf-8")obj = json.load(data)data.close()#********** Begin *********#obj["count"]=4
#修改键值对,把学生数从3改为4obj["infos"][0]["age"]=16obj["infos"][1]["age"]=17obj["infos"][2]["age"]=16obj["infos"].append({"name":"叶良辰","age":17,"height":1.87,"sex":"男性"})#********** End **********#output = open("step2/2018.txt","w",encoding = "utf-8")json.dump(obj,output) #输出到文件output.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot EasyUI edatagrid 扩展

edatagrid扩展组件详解 edatagrid组件是datagrid的扩展组件,增加了统一处理CRUD的功能,可以用在数据比较简单的页面。使用的时候需要额外引入jquery.edatagrid.js为了能够把后台自动捕获的异常显示到前台这里必须使用最新版本的jquery.edatagrid.js文件能…

MATLAB使用教程(4)——悄悄滴上手项目

目录 1.计算一元二次方程 2.看一元方程的图形 有个小疑问? 惊喜: 总结 1.计算一元二次方程 这一讲我们以科学计算开始,使用matlab计算精确度很高,我们可以尝试来计算一下黄金分割率(定义大家可以自行百度一下&am…

html导出excel 内存不足,web导出excel那些坑

背景介绍昨天在一个前端的微信公众号看到一篇文章介绍导出cvs文件的,想想之前做导出excel的踩过的坑,心想记录一下,或许可以帮助别人吧!需求很简单,在某个报表页面需要把table导出excel.寻找解决方案方案一首先想到的上github寻找解决方案,通过关键词的搜索找到了tableExport.j…

两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案

数据采集习题参考答案,会持续更新,点个关注防丢失。为了方便寻找,按照头歌的门类从新整理了实训的分类,朋友们记得看标题哦,按标题寻找! 该篇为爬虫知识储备! 文章目录 实训一:HTM…

Spring Boot swagger之前后端分离

前后端分离详解 现在的趋势发展,需要把前后端开发和部署做到真正的分离做前端的谁也不想用Maven或者Gradle作为构建工具做后端的谁也不想要用Grunt或者Gulp作为构建工具前后端需要通过接口来协作 可能是JSON格式的RESTFul的接口可能是XML的接口重点是后台只负责数据…

login.html id=9453,SN100C Sublizenzierung und Aufnahme in die ISO 9453

摘要:Die von Nihonuperior entwickeltend patentierteleifreie LegierungNIOOCat vorehrls 15 Jahren, nicht zuletzt durch dieervorragenderbeit deralver Zinn-Gruppe, einen wahreniegeszug in der Elektronikbranchengetreten.NIOOCtehturervorragende Lotqua…

MATLAB基础教程(5)——斐波那契数列

目录 前言 正文开始啦: 总体思路: 首先创建文件: 编写 fibo_use.m 文件的内容代码 编写 fibonacci_mine.m 文件中的代码 代码运行 总结: 前言 斐波那契数列是一个很有趣的数列,有趣的地方在两点,在…

数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案

数据采集习题参考答案,会持续更新,点个关注防丢失。为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块。 创作不易,一键三连给博主一个支持呗。 文章目录 实…

Spring Boot freemarker导出word下载

freemarker详解 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序…

学生用计算机怎么累加,计算机一级OFFICE辅导:累加小技巧

我们在工作中常常需要在已有数值的单元格中再增加或减去另一个数。一般是在计算器中计算后再覆盖原有的数据。这样操作起来很不方便。考试大编辑推荐一个小技巧,可以有效地简化老式的工作过程。(1).创建一个宏:选择Excel选单下的“工具→宏→录制新宏”选…

数据采集与清洗基础习题(三)Python正则表达式,头歌参考答案

数据采集习题参考答案,会持续更新,点个关注防丢失。 创作不易,一键三连给博主一个支持呗。为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python正则表达式 文章目录 实训一…

应用电子技术插计算机科学,插本专业大全

广州大学:工商管理工程管理法学五邑大学:会计学电子商务电子信息工程电子信息工程(职教师资班)通信工程(计算机通信网络方向)机电工程及自动化机电工程及自动化(职教师资班)土木工程工业设计韶关学院:汉语言文学国际经济与贸易工商管理会计学…

不同进制之间的转化

将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。 假设当前数字是 N 进制,那么: 对于整数部分,从右往左看,第 i 位…

[刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)

组合评价模型—模糊Borda(Matlab) 我们的征途是星辰大海,而并非烟尘人间。 目录 组合评价模型—模糊Borda(Matlab) 一、模糊Borda法简介 二、模糊Borda法主要步骤 (1)计算隶属度 (2)计算模糊频数 (…

计算机桌面右键新建展不开,Win10右键新建不见了怎么办?Win10电脑桌面右键新建没有了解决方法...

近期有Win10用户遇到一个问题,也就是电脑桌面右键新建没有了,比如想要创建一个文本文档、文件夹、Word,没有新建功能无法创建,那么Win10右键新建不见了怎么办?下面装机之家分享一下Win10电脑桌面右键新建没有了解决方法…

最常用的客观赋权方法——熵权法

我们的征途是星辰大海,而并非烟尘人间。 文章目录 一、熵权法的原理 1.1 信息熵 1.2 熵权法 二、熵权法的主要步骤 2.1 数据标准化 2.2 求各指标在各方案下的比值 2.3 求各指标的信息熵。 2.4 确定各指标的权重 2.4.1 通过信息熵计算各指标的权重&#…

2017韩老师计算机网络,2017年计算机等考三级网络技术辅导:计算机网络拓扑结构...

1.计算机网络拓扑的定义计算机网络设计的第一步就是网络拓扑设计。拓扑学是几何学的一个分支。计算机网络拓扑是通过网中结点与通信线路之间的几何关系表示网络结构,反映出网络各实体之间的结构关系。2.网络拓扑的分类网络拓扑可以根据通信子…

Spring Boot html页面解析之jsoup

目的 我们要对一个页面进行数据抓取,并导出doc文档 html解析器 jsoup 直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。 htmlparser 提供了线性和嵌套两种方…

2021年五一杯数学建模A题(疫苗生产调度问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 2.4 问题四分析与求解 2.5 问题五分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 新冠肺炎肆虐全球&#xff0…

计算机网络云南大学实验四,云南大学软件学计算机网络原理实验四.doc

云南大学软件学计算机网络原理实验四实验四、web服务器套接字编程实验指导1.实验目的:编写一个WEB服务器程序,可以接受来自浏览器的访问,并传输页面(包含多个对象)到浏览器。掌握Socket编程。2.实验环境:连…