JSON学习笔记

本文介绍了JSON的基础知识,包括它的定义、结构和合法实例。在Python中,JSON用于数据交换,与字典有相似之处但不完全相同。文章详细讲解了json模块的使用,包括dump/load和dumps/loads方法,并通过示例展示了如何进行序列化和反序列化。同时,文中指出JSON要求键必须用双引号,并在转化过程中可能会遇到的问题。
摘要由CSDN通过智能技术生成

文章目录 


前言

         之前在学习python时,接触过json模块,但是对此是一知半解,因此我决定复习json并记下笔记。


提示:以下是本篇文章正文内容,下面案例可供参考 

1、JSON基础

1.1、JSON是什么?

     JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

1.2、JSON的两种结构

1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

 2、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array),值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。

1.3、JSON的合法实例  


{"key1":"value1","key2":'value2'}#名称值对的集合
[1,2,3]#值的有序序列
[{"1":1.01},{"2":2}]#值的有序序列,里面可以嵌套的字典
'str'

对于末行json的合法实例,基于我现在知识的理解是:python中一切皆对象,如字符串这种基本数据类型的实例其实就是对象,那么它的结构就是“名称/值”对的集合

 

2、JSON在python中的使用

2.1、JSON格式与字典的区别

问题引入:通过1.3的实例,我们可以发现python中的字典不就是就是json格式吗,可实际上真的是这样吗?

1、字典是数据类型而json是数据格式

2、字典是python中内置的一个数据结构,由多个键值构成,键和值用冒号分割,每个键值对之间用(,)号分割并包含在({})中,键是唯一的,值可以取任何类型,但是键必须是不可变类型,如字符串,数字或元组

3、描述虽然和json很相似,但别忘了,json中key必须用双引号(在转化字典为json格式时会有点坑,在下文将会验证),并且字典不能嵌套,而且二者之间没有可比性

4、基于以上几点列出几例,不满足json,但是可以为字典

{1:'key'}
{(1,2):1}

2.2、序列化与反序列化——json模块

简单说明:python中对象转化json格式可以使用两个模块,一种是只在python中使用的pickle模块,第二种是可在python外广泛使用的json模块,下面主要写json模块的简单操作

2.2.1、dump与load方法

dump(object,fp):将 obj 序列化为 JSON 格式化流形式的 fp (支持 .write() 的 文件对象)。

load(fp):将 fp (一个支持 .read() 并包含一个 JSON 文档的 text file 或者 binary file) 反序列化为一个 Python 对象。

实验代码:

import sys
print(sys.getdefaultencoding())#获取环境下的编码
data={'key1':'value1','key2':'value2'}
with open('./test.txt','w') as f:#open函数在没有指定编码时会查找使用python环境的编码
    json.dump(data,f)
with open('./test.txt','r') as f:
    value=json.load(f)
    print(value,type(value))

实验结果:

utf-8
{'key1': 'value1', 'key2': 'value2'} <class 'dict'>

2.2.2、dumps与loads方法

dumps(object):将 obj 序列化为 JSON 格式的 str。 

loads(str):将 s (一个包含 JSON 文档的 strbytes 或 bytearray 实例) 反序列化为 Python 对象。

实验代码:

#例1
data={'key1':'value1','key2':'value2'}
string=json.dumps(data)#对象序列化json格式的str
print(string,type(string))
newdata=json.loads(string)#json格式的str序列化成对象
print(newdata,type(newdata))


#例2
data2={1:'value1',(2):'value2'}
string=json.dumps(data2)
print(string,type(string))
newdata2=json.loads(string)
print(newdata2,type(newdata2))

实验结果:

例子1结果:
{"key1": "value1", "key2": "value2"} <class 'str'>   
{'key1': 'value1', 'key2': 'value2'} <class 'dict'>  
例子2结果:
{"1": "value1", "2": "value2"} <class 'str'>
{'1': 'value1', '2': 'value2'} <class 'dict'> 

2.2.3、问题发现与解决:

问题:在例子2中对象和json格式的转化出现了问题,原来的对象是{1:'value1',(2):'value2'}在对象转json,json转对象中发生了变化,成了:{'1': 'value1', '2': 'value2'}

原因:json中key必须是双引号的字符,所以在转换过程中原来的key类型被转化成了字符串类型


总结

       本文仅仅写了些json基础与在python中的使用,其实json被广泛使用于数据传输,前后端的数据交互。

       行文至此,发觉自己不过沧海一粒,但仍在此共勉,绳锯木断,水滴石穿!

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜小白也想的美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值