10. 【Java基础】Json操作与IO流

一:JSON操作


JSON(JavaScript Object Notation, JavaScript 对象表示法) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

目前大部分接口是通过JSON传输数据的,所以要做接口测试/接口自动化测试必须要掌握对JSON的处理。

{“principal”:“lemon_auto”,“credentials”:“lemon123456”,“appType”:3,“loginType”:0}

JSON语法规则:

  • 数据在键值对中
  • 多条数据由逗号分隔
  • 大括号 {} 保存对象

{
“name”: “tom”,
“age”: “26”
}

  • 中括号 [] 保存数组

{
“hobby”: [“游戏”, “音乐”, “电影”]
}

JSON值的类型:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

例子:

{
“name”: “rose”,
“age”: 10,
“height”: 180.5,
“isSingle”: false,
“address”: {
“provinces”: “湖南省”,
“city”: “长沙”
},
“hobby”: [“游戏”, “音乐”, “电影”],
“weight”: null
}

Jackson技术处理JSON

  • Jackson是一个功能强大的处理JSON的依赖,除了支持常用的JSON,同时还支持XML,CSV,YAML。

        com.fasterxml.jackson.core jackson-databind 2.9.8

序列化与反序列化

  • 把对象转换为字节序列的过程称为对象的序列化;把字节序列恢复为对象的过程称为对象的反序列化。
  • 序列化:Java对象 --> JSON/YAML/XML
  • 反序列化:JSON/YAML/XML --> Java对象

Jackson使用

  • ObjectMapper(对象转换器)是序列化/反序列化操作的核心,Jackson的所有操作都是在ObjectMapper中实现
  • ObjectMapper mapper = new ObjectMapper();

序列化:

1.对象转JSON

Student student = new Student(“张三”,18);
String json = mapper.writeValueAsString(student);


2.Map转JSON

HashMap<String, Object> map = new HashMap<String, Object>();
map.put(“error”, 1);
map.put(“msg”, “系统错误”);
String json = mapper.writeValueAsString(map);

反序列化:

1.JSON转对象

String jsonStr = “{“name”:“张三”,“age”:18}”;
//JSON字符串转对象
Student student = mapper.readValue(jsonStr, Student.class);
//还可以支持将JSON文件转对象
Student student = mapper.readValue(new File(“data.json”), Student.class);


2.JSON转Map

String jsonStr = “{“name”:“张三”,“age”:18}”;
HashMap<String,Object> map = mapper.readValue(jsonStr, HashMap.class);

复杂JSON数据结构反序列化:

{
“name”: “lemon35”,
“students”: [{
“name”: “张三”,
“age”: 20
}, {
“name”: “李四”,
“age”: 18
}, {
“name”: “王五”,
“age”: 25
}]
}

二:IO流


IO流是Java操作文件读写的技术

I:input(输入流,读取文件内容到流对象)
O:output(输出流,写文件内容到文件)
分类:

字符流:一般是操作文本文件的读写(掌握)
字节流:一般是操作图片,视频,音频文件的读写(了解)

字符流
Reader:输入流/写入流

Writer:输出流/写出流

最常用的字符流:

BufferReader

readline():一次性读取一行
close():关闭输入流
BufferWriter

write():写内容
newLine():重新启一行
close():关闭输出流

字节流
InputStream:输入流/写入流

OutputStream:输出流/写出流

最常用的字节流:

FileInputStream

read(byte[] bytes):将数据读到bytes数组,返回实际读取数据大小size。
FileOutputStream

write(byte[] bytes,0,size ):将数组里的数据写到输出流,每次实际写的数据大小为上面读取数据的大小。

作业
1、使用IO流读取下述日志文件中的内容,并将每行日志中的[Appium]开头去掉,只保留日志主体内容输出到控制台

[Appium] Welcome to Appium v1.19.1
[Appium] Non-default server args:
[Appium] address: 127.0.0.1
[Appium] relaxedSecurityEnabled: true
[Appium] allowInsecure: {
[Appium] }
[Appium] denyInsecure: {
[Appium] }
[Appium] Appium REST http interface listener started on 127.0.0.1:4723

2、将以下json字符串进行反序列化:

(1)转HashMap集合

{“access_token”:“44f62406-f9e1-4033-8298-4e56a212fecf”,“token_type”:“bearer”,“expires_in”:1295999,“userId”:“da4a93de689046568d375be1b212da79”,“nickName”:“lemontester”,“enabled”:true}
(2)转Java普通对象

{“name”:“中国”,“provinces”:[{“name”:“黑龙江”,“capital”:“哈尔滨”},{“name”:“广东”,“capital”:“广州”},{“name”:“湖南”,“capital”:“长沙”}]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值