码这么多字只为搞懂如何在Python和Java中使用JSON

目录

1 JSON是什么?

1.1 JSON是众多编程语言共同的“简谱”

1.2?JSON是一种高度结构化的文本

2 如何在Python中使用JSON

2.1 内置库json的编码与解码

2.1.1 编码1:将字典编码为JSON字符串

2.1.2 编码2:将自定义类的对象编码为JSON字符串

2.1.3?解码1:将JSON字符串解码为字典

2.1.4 解码2:将JSON字符串解码为自定义类的对象

2.2 requests库处理json的方法

2.3 提取json中数据信息的方法

3 如何在Java中使用JSON

3.1 Gson库和FastJson库的资源下载

3.2 用Gson处理JSON的方法

3.2.1 编码1:将Map对象编码为JSON字符串

3.2.2 编码2:将自定义类的对象编码为JSON字符串

3.2.3?解码1:将JSON字符串解码为Map对象

3.2.4?解码2:将JSON字符串解码为自定义类的对象

3.3 用FastJson处理JSON的方法

3.2.1 编码1:将Map对象编码为JSON字符串

3.2.2 编码2:将自定义类的对象编码为JSON字符串

3.2.3 解码1:将JSON字符串解码为Map对象

3.2.4 解码2:将JSON字符串解码为自定义类的对象


1 JSON是什么?

1.1 JSON是众多编程语言共同的“简谱”

JSON的全称是JavaScript Object Notation,中文翻译是JS对象简谱,是一种轻量级的数据交换格式。JavaScript是多用于Web前端开发的编程语言,支持面向对象的编程(OOP)。JSON从字面上看就是存储JS对象的一种简便、轻量的格式。

提到“简谱”,我们很容易想到音乐中的数字简谱,即使像我这种不懂音乐的人,也会觉得简谱看上去要比各种音符组成的五线谱更容易阅读一些。

JSON不仅能做JS对象的“简谱”, 还能做很多编程语言的“简谱”,而且是它们共同的“简谱”。不同的编程语言的语法是不一样的,因此不同语言编写的程序之间往往“语言不通”,比如:Java看不懂Python对象,Python也看不懂Java对象。为了不同的编程语言能够沟通,比较好的方法是把对象表达为一种简单易读的统一格式。

JSON用键值对的形式存储对象的属性名属性值,每一个对象都放在一个大括号里。比如我用JSON给自己写一个对象,一个可爱型的女生,具有善良、聪明、开朗等个性,还养了一只2岁的泰迪犬,那么我的对象就有四个属性:性别、类型、个性和狗狗;狗狗也是一个对象,有品种和年龄两个属性。

{
    "gender":"female",
    "kind":"cute",
    "character":["goodness"," intelligent","lively"],
    "puppy":{ 
              "breed":"teddy",
              "age":2
            }
    
}

当Java或者Python程序员就这点好,可以在程序的世界里随意写对象。好吧,言归正传,JSON表面上看是一个带有大括号、方括号和冒号的某种数据集合,但实际上是一个文本文件。这也是JSON实现跨平台、跨语言交换数据的重要基础。

1.2JSON是一种高度结构化的文本

先想象一个场景,一个广东人跟一个上海人交流,他们互相听不懂对方的方言,但是两人把要说的内容用汉字写下来,立马就明白了对方的意思,这就是汉字的超方言性(笔者的专业是语言学)。

文本就具有类似于汉字的作用。不同的编程语言具有不同的数据结构类型体系,这就造成了互相沟通的障碍。但是所有的编程语言都会支持文本这一最基本的处理信息的类型。对于Python和Java来说,文本类型实际上就是字符串类型

JSON中数据的组织方式是高度结构化的,结构化的第一个表现是层级性,上面写的那个对象中,对象里面嵌套着对象;在层级性的基础上,同一层级的数据要有对应性有序性,键值对的格式保证了每一层数据间的对应关系;属性的值也有可能是存储多值的数据集合,其中的数据要排列有序。

我们可以在CSDN主页的XHR请求中观察JSON的层次结构,操作步骤以Google浏览器为例。

第一步:右键“检查” — 点击“Network” — 点击“XHR”;

第二步:重新加载页面 — 在左侧Name栏打开一个请求 — 点开右侧的preview — 观察层级结构

我们看到的那个能够一层层展开的结构,很像Python的字典或者Java的Map。但事实上,是XHR采用JSON格式传输数据。

2 如何在Python中使用JSON

2.1 内置库json的编码与解码

json是python的内置库,定义了 json.dumps(dict)json.loads(json_str) 两个方法,前者用于将Python数据结构类型编码为json字符串,后者用于将json字符串解码为Python数据结构类型。

2.1.1 编码1:将字典编码为JSON字符串

我们在1.1中用json写好的那个“对象”与Python字典从外表上看一模一样,先将其写成字典(变量名spouse,就是配偶、对象的意思,哈哈哈),然后编码,方法的参数是Python字典:

import json

# 写一个 字典 类型的“对象”
spouse = {
    "gender":"female",
    "kind":"cute",
    "character":["goodness"," intelligent","lively"],
    "puppy":{ 
              "breed":"teddy",
              "age":2
            }
}

# 将 字典 编码为 json字符串
spouse_json = json.dumps(spouse)


# 打印spouse和spouse_json
print(spouse)
print(spouse_json)

如果我们直接打印,会发现spouse和spouse_json在终端中显示出来的结果一模一样:

{'gender': 'female', 'kind': 'cute', 'character': ['goodness', ' intelligent', 'lively'], 'puppy': {'breed': 'teddy', 'age': 2}}
{"gender": "female", "kind": "cute", "character": ["goodness", " intelligent", "lively"], "puppy": {"breed": "teddy", "age": 2}}

如果我们分别打印二者的数据类型,会发现spouse是dict,spouse_json是str,对于Python来说,json就是一个高度结构化的字符串

print(type(spouse))  # <class 'dict'>
print(type(spouse_json))  # <class 'str'>

2.1.2 编码2:将自定义类的对象编码为JSON字符串

将自定义类的对象转化为JSON字符串要经过一个中间步骤,即先将对象转化为字典,然后再将字典传入json.dumps(dict) 方法。为了简化代码,自定义类就写三个属性作为演示。

import json

# 先自定义一个类
class Spouse:
    def __init__(self, gender, kind, character):
        self.gender = gender
        self.kind = kind
        self.character = character

# 类 实例化为一个 对象
spouse = Spouse("female","cute",['goodness', ' intelligent', 'lively'])

# 将 对象 转换为 字典
spouse_dict = spouse.__dict__

# 将 字典 传入 json.dumps(dict)方法
spouse_json = json.dumps(spouse_dict)

print(spouse_json)
print(type(spouse_jso
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值