python json数据格式数组内元素递增赋值_利用Python实现JSON格式数据的编码与解码操作...

导读

JSON (全称:JavaScript Object Notation )是一种轻量级的数据交换格式,所谓的轻量级,是与 XML 数据结构相比而言的,在描述相同的数据下,JSON 所需的字符比XML 的要少,这就意味着相同意义的数据, JSON 能更快完成传输,所需的流量也会减少,所以在移动互联网中JSON 数据格式会用的更多。

关于 JSON 数据完整概述,可直访:

JSON 数据类型

JSON 是一种非常灵活,具有高度可定制化的数据格式,其一般由以下几种数据类型单一或混合组成:

number:整型数据;

boolean:布尔类型数据,true或false;

string:字符串数据;

null:null;

array:数组(Array),类似 Python 的列表 — [];

object:类似 Python 的字典数据 — { Object:value }。

其中,对象(object) 和 数组(array) 为比较特殊且常用的两种类型:

J
SON 对象

基本格式:

{“Object1”: "value1", “Object2”: "value2", ...}

JSON 对象数据格式与 Python字典类似,同样以键值对形式存在,外层使用大括号{}包裹,Object 为“键”,value 为对应的“值”,“键”与“值”之间用冒号:间隔,元素间用逗号,间隔,其中 Object 可用数字或字符串表示,value 可以是任意类型的数据,可以是数字、字符串、字典、数组等。

示例:

{

"name": "taitai",

"birthday": "2000-1-1",

"hobby": "['basketball', 'football']",

"score": "{'chinese': '88', 'math': '95', 'english': '82'}"

}

JSON 数组

基本格式:

["element1", "element2", ...]

JSON 数组与 Python 列表数据的格式类似,均是一连串的元素集合,在 JSON 数组一个较为特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,其值的类型可以是任意类型。

示例:

[{

"name": "taitai",

"birthday": "2000-1-1",

},

{

"name": "taitai",

"birthday": "2000-1-1",

}

]

JSON 规定字符集必须为 UTF-8 编码。同时,为了统一解析,JSON 还规定 Object (键) 必须使用双引号""包裹,且当 value(值) 为字符串数据时,也必须用双引号""包裹。

JSON 编码 & 解码

在互联网中,如果需要传输对象数据,就需要先将该对象转化为 JSON 格式的字符串,这个过程称为“对象序列化(编码)”,反之,在接收到 JSON 字符串后,要转为目标对象使用时,就需要进行 “反序列化(解码)”,两者是互逆过程。

Python 数据与 JSON 数据映射关系

Python 数据

JSON 数据

整数、浮点数等数据类型

数字

字符串

字符串

布尔类型(True 、False)

true、false

Null

null

列表、元组

数组

字典

对象

JSON 编码

Python 提供了一个内置的 json 模块用于处理 Python数据 与 JSON数据 的相互转换操作。其中模块提供的 dumps 和 dump 方法用于将 Python 对象转换为 JSON 数据,即实现编码过程。

实例:

# coding=utf-8

import json

# 创建数据

data = {

'name': 'taitai',

'age': 18,

'hobby': ['basketball', 'football'],

'score': {'chinese': '88', 'math': '95', 'english': '82'}

}

print(data)

print(type(data)) # 编码前数据类型

# dumps 编码(单行输出)

data2 = json.dumps(data)

print(data2)

print(type(data2)) # 编码后数据类型

# dumps 编码(排版输出,指定逐层跳格为 4)

data2 = json.dumps(data, indent=4)

print(data2)

# dump方法:将数据编码,并写入指定的文件

# 不排版

with open('./data2.json', 'w') as f:

json.dump(data2, f)

# 排版

with open('./data3.json', 'w') as f:

json.dump(data2, f, indent=4)

实例输出:

{'name': 'taitai', 'age': 18, 'hobby': ['basketball', 'football'], 'score': {'chinese': '88', 'math': '95', 'english': '82'}}

{"name": "taitai", "age": 18, "hobby": ["basketball", "football"], "score": {"chinese": "88", "math": "95", "english": "82"}}

{

"name": "taitai",

"age": 18,

"hobby": [

"basketball",

"football"

],

"score": {

"chinese": "88",

"math": "95",

"english": "82"

}

}

同时还会在当前目录下创建 data2.json 和 data3.json 两个文件。

JSON 解码

上述实例实现了 JSON 的编码操作,前面也说了有编码就有解码,这是一个相互伴随的过程,json 模块同样提供了 loads() 和 load() 方法实现 JSON 数据的解码操作。

实例:

# coding=utf-8

import json

# 创建数据

json_data = r'{"name": "taitai", "age": 18, "hobby": ["basketball", "football"], "score": {"chinese": "88", "math": "95", "english": "82"}}'

print("json_data 数据:", json_data)

print("json_data 数据类型:", type(json_data)) #

# 解码

data = json.loads(json_data)

print("data 数据:", data)

print("data 数据类型:", type(data)) #

print(data['name'])

print(data['hobby'])

print(data['score'])

# 解码 JSON 文件

with open('./data2.json', 'r') as f: # 使用前面编码生成的 JSON 文件

data2 = json.load(f)

print("JSON 文件解码后,内容为:\n", data2)

实例输出:

json_data 数据: {"name": "taitai", "age": 18, "hobby": ["basketball", "football"], "score": {"chinese": "88", "math": "95", "english": "82"}}

json_data 数据类型:

data 数据: {'name': 'taitai', 'age': 18, 'hobby': ['basketball', 'football'], 'score': {'chinese': '88', 'math': '95', 'english': '82'}}

data 数据类型:

taitai

['basketball', 'football']

{'chinese': '88', 'math': '95', 'english': '82'}

JSON 文件解码后,内容为:

{

"name": "taitai",

"age": 18,

"hobby": [

"basketball",

"football"

],

"score": {

"chinese": "88",

"math": "95",

"english": "82"

}

}

喜欢 (6)or分享 (0)

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

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

相关文章

java注解中可使用对象_Java注解(二):实战 - 直接使用对象列表生成报表...

通过对Java注解(一):介绍,思想及优点学习了解,相信大家对Java注解有一定程度的了解,本篇文章将实战项目中的应用来加深对Java注解的了解。本实例实现根据指定字段的JavaBean,生成对应列的报表。使用Java注解就是方便实现JavaBean与…

ASP.NET WebForm中使用WebApi

添加webapi.dll 可现在添加。 在WebForm使用WebApi需要在全局文件里配置路由。 using System.Web.Routing;protected void Application_Start(object sender, EventArgs e){RegisterRoutes(RouteTable.Routes);}public static void RegisterRoutes(RouteCollection routes){//C…

rt5350 中断初始化

linux 下的中断初始化,实际就是对 irq_desc 这个结构体进行初始化,其中最关键莫过于 irq_flow_handler_t handle_irq 中断处理函数 struct irqaction *action 用户自己设置的处理函数链表,由hand…

VS2010安装异常中断后无法安装的解决方法(安装时发生严重错误)

最近,因为公司开发的需要,对开发环境进行全面的升级,在这其中也遇到了不少问题,在之后将陆续整理出来,以便以后查看。 之前开发环境:ArcGIS9.3,ArcEngine9.3,Oracle10g,A…

python自动下载邮件_python实现邮件自动化

1、自动接收邮件并且下载附件,使用pop3协议。# 接收邮件并下载邮件附件import poplibimport emailimport datetimeimport timefrom email.parser import Parserfrom email.header import decode_headerimport tracebackimport telnetlibimport sys# from email.util…

将5350 i2c clk设置为gpio 中断模式的方法

5350和我之前用的三星和全志的芯片在中断这块有点差别,三星和全志的都是有专门的外部中断管脚,并且每个中断管脚对应一个中断号,对管脚寄存器的配置即irq_desc里chip变量,都是bsp里自带的,我们只需要用request_irq来注…

代码大全 MSIL语言程序设计

.NET平台的编译器会将高级语言(C#,VB.NET,F#)编译成MSIL(微软中间语言)格式。熟悉MSIL语言,可以读懂一些加密程序混淆过的算法,这些算法几乎不能还原成高级语言,但是可以还原成MSIL语言。也可以知道一些高级语言之外的关于CLR的特性&#xff…

python 条件概率_机器学习中的概率问题

机器学习的过程可以理解为计算机通过分析大量的数据获得模型,并通过获得的模型进行预测的过程。机器学习的模型可以有多种表示,例如线性回归模型,SVM模型,决策树模型,贝叶斯模型。概率类型在理解概率模型之前&#xff…

java string 类 上机_java上机试题

请将下列关键字填写到适当的位置中。newextendsimplementsstaticsuperpublicabstractthisimportpackage(1)Fruits;//声明包语句(2)java.util.*;abstractclassFruit//定义抽象类Fruit{D...请将下列关键字填写到适当的位置中。new extends implements static superpublic abstrac…

LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。 LD_LIBRARY_PA…

下列python语言、返回结果不是uc_MKAN1-UC 5103作业代写、代做Analytics作业、Java,Python,c/c++程序语言作业代做...

MKAN1-UC 5103作业代写、代做Analytics作业、Java,Python,c/c程序语言作业代做日期:2020-05-21 11:08Marketing Analytics Spring 2020 Final ExamMKAN1-UC 5103 Marketing Analytics Spring 2020 Final ExamInstructions (total 3 points):?…

以太网交换机

以太网交换机是基于以太网传输数据的交换机,以太网采用共享总线型传输媒体方式的局域网。以太网交换机的结构是每个端口都直接与主机相连,并且一般都工作在全双工方式。交换机能同时连通许多对端口,使每一对相互通信的主机都能像独占通信媒体…

java中Class对象详解

java中把生成Class对象和实例对象弄混了,更何况生成Class对象和生成instance都有多种方式。所以只有弄清其中的原理,才可以深入理解。首先要生成Class对象,然后再生成Instance。那Class对象的生成方式有哪些呢,以及其中是如何秘密…

python分组求和法_python – 如何将groupby值的总和除以另一个值的count

我想通过’label’和’month’分组来计算每个月和每个标签的销售数量.我正在尝试’groupby和apply’方法来实现这一目标,但不确定如何计算每个标签的月份.比方说,对于标签值AFFLELOU(DOS),我有7个月的两个值.所以,我应该将销售数量相加并除以2.在第9个月和第10个月,我只有一个值…

Microsoft Visual Studio 打开代码出现乱码解决方案

在用VS编写代码时,文本的字符集可能和编译器的字符集不同,在这种情况下代码会显示出乱码。 解决办法: 在VS的工具->选项里面找到"文本编辑器",勾选“自动检测不带签名的UTF-8编码(D)”选项。 重新打开VS编译器&#…

java正则表达式及api_Java API 之 正则表达式

一、基本概念在项目中我们经常性做的一件事是“匹配”字符串比如:1、我们要验证用户输入的手机号是否合法?2、验证设置的密码是否符合规则?3、或者替换指定字符串中的一些内容。这么一看,似乎正则表达式就是在查找、处理字符串。二…

PB错误处理

//itemerror事件里出错处理 string ls_colname,ls_datatype Boolean ab_msg true ls_colname dwo.name ls_datatype dwo.coltype if trim(data) "" or isnull(data) then ab_msg false //之前这里使用return 3,所以出现这个问题 end if string d…

idea 创建java文件_idea创建java文件 格式不对

import java.io.File;import java.io.FileWriter;import java.io.IOException;public class Test {public static void main(String[] args) {//文件路径File filenew File("d:\\alphabet.txt");//如果文件存在就进行下面的操作,否则打印“找不到文件&…

待办事项桌面插件_让浏览器重获整洁——标签页管理插件:OneTabOneTab PlusToby...

1 什么是标签页管理插件chrome浏览器虽然为用户提供了一个非常方便的打开新标签页的方法,但是随着用户浏览网页的时间增长,用户在一个chrome窗口中打开的标签页会越来越多,当这些标签页过多的时候,用户在标签页之间进行切换就会变…

ext2 源代码解析之 “从路径名到目标结点” (一)

两个主要函数,path_init和path_walk,他们结合在一起根据给定的文件路径名称在内存中找到或者建立代表着目标文件或目录的dentry和inode结构。注意,最终是信息是读取到内存中的。其中有个函数__user_walk()将path_init(…