Java中Json解析

Json基础概念

JavaScript Object Notation(json):JavaScript 对象表示法

  • json 多用于网络数据格式化传输
  • 也用于存储和交换文本信息
  • 比 XML 更轻量、更快速,更易于解析

json格式示例:

{
  "status": 200,
  "message": "success",
  "data": {
    "age": 18,
    "name": "李连杰",
    "teaList": [
      {
        "className": "3-2",
        "name": "李灵"
      },
      {
        "className": "3-1",
        "name": "张合"
      },
      {
        "className": "3-3",
        "name": "徐程"
      }
    ]
  }
}

Json数据类型以及表示格式

json数据是由键值对构成的,“message”: “success” ,数据之间以逗号分隔

  • 键:一般用引号引起来
  • 值:
    number 数字,整数或浮点数
    string 字符串,一般使用双引号
    null
    boolean 布尔值,true 或 false
    array 数组,以方括号的形式表示 [ ]
    object 对象,以大括号的形式表示 { }

详细参考上面示例

Json解析

Gson解析

  1. 导入jar包【下载链接
    在这里插入图片描述

  2. 创建Gson实例

// 用于输出紧凑格式的json,对象字段以及JSON输出中数组内的对象等之间将没有空格
Gson gson = new Gson();
// 紧凑格式的json难以阅读,Gson提供了一个美化格式的类来进行转换
Gson gsonBuilder = new GsonBuilder().setPrettyPrinting().create();
  1. 通过Gson对象解析json
List<Teacher> teaList = new ArrayList<>();
teaList.add(new Teacher("李灵", "3-2"));
teaList.add(new Teacher("张合", "3-1"));
teaList.add(new Teacher("徐程", "3-3"));
Student stu = new Student("李连杰", 18, teaList);
// 测试Java对象
System.out.println("Java对象=>" + stu);

Student[] stuArr = new Student[3];
stuArr[0] = new Student("张三", 18, teaList);
stuArr[1] = new Student("李四", 22, teaList);
stuArr[2] = new Student("王五", 20, teaList);
// 测试Java数组
System.out.println("Java数组=>-------------");
for (Student s : stuArr) {
    System.out.println(s);
}
System.out.println("----------------------");

Java对象 –> JSON字符串

// Java对象 –-> Json字符串
String json = gson.toJson(stu);
String jsonBuilder = gsonBuilder.toJson(stu);
System.out.println("紧凑的json字符串->" + json);
System.out.println("美化的json字符串->" + jsonBuilder);

json

Json字符串 –> Java对象

// Json字符串 -–> Java对象
// json字符串:{"name":"周星星","age":28,"teaList":[{"name":"李分灵","className":"3-2"},{"name":"张德合","className":"3-1"},{"name":"徐发程","className":"3-3"}]}
String str = "{\"name\":\"周星星\",\"age\":28,\"teaList\":[{\"name\":\"李分灵\",\"className\":\"3-2\"},{\"name\":\"张德合\",\"className\":\"3-1\"},{\"name\":\"徐发程\",\"className\":\"3-3\"}]}";
Student student = gson.fromJson(str, Student.class);
// 测试打印
System.out.println("转换的Java对象属性->" + student.getName());

json

Java数组对象 –> Json字符串

// Java数组对象 --> Json字符串
String json = gson.toJson(stuArr);
System.out.println("紧凑的json字符串->" + json);

在这里插入图片描述

Json字符串 –> Java数组对象

// Json字符串 --> Java数组对象
// json字符串:[{"name":"张三","age":18},{"name":"李四","age":22},{"name":"王五","age":20}]
str = "[{\"name\":\"张三\",\"age\":18},{\"name\":\"李四\",\"age\":22},{\"name\":\"王五\",\"age\":20}]";
Student[] students = gson.fromJson(str, Student[].class);
// 测试打印
System.out.println("转换的Java数组=>-------------");
for (Student s : students) {
    System.out.println(s);
}
System.out.println("---------------------------");

json
Json字符串 –> Java_List对象

// Json字符串 --> Java_List对象
// json字符串:[{"name":"张三","age":18},{"name":"李四","age":22},{"name":"王五","age":20}]
List<Student> list = gson.fromJson(str, new TypeToken<ArrayList<Student>>() {}.getType());
// 测试打印
System.out.println("转换的Java集合:" + list);

在这里插入图片描述
Json字符串转Java_Set跟List相同,后不再示例

Null值处理

Gson中实现的默认行为是忽略空对象字段。

  • 如何在序列化时允许空值
使用GsonBuilder对象的serializeNulls()
Gson gson = new GsonBuilder().serializeNulls().create();

Google Gson用法详解

FastJson解析

  1. 导入jar包,下载链接
    json

  2. 直接解析json即可

// Java对象转JSON串
String jsonString = JSON.toJSONString(stu);
System.out.println("jsonString:" + jsonString);

// JSON串转Java对象
Student student = JSON.parseObject(jsonString, Student.class);
System.out.println("student:" + student);

json

// Java数组转JSON串
String jsonString2 = JSON.toJSONString(stuArr);
System.out.println("jsonString2:" + jsonString2);

// JSON串转Java集合
// jsonString = [{"name":"张三","age":18},{"name":"李四","age":22},{"name":"王五","age":20}]
String jsonString3 = "[{\"name\":\"张三\",\"age\":18},{\"name\":\"李四\",\"age\":22},{\"name\":\"王五\",\"age\":20}]";
JSON.parseArray(jsonString3, Student.class);
List<Student> stuList = JSON.parseArray(jsonString3, Student.class);
System.out.println("stuList:" + stuList);

json
FastJson示例演示

JavaJSON解析可以使用Java内置的JSON库或第三方库。以下是使用Java内置的JSON解析JSON的示例: 1. 导入JSON库 ```java import org.json.*; ``` 2. 创建JSON对象 ```java String jsonString = "{\"name\":\"Tom\", \"age\":18}"; JSONObject jsonObject = new JSONObject(jsonString); ``` 3. 获取JSON对象的数据 ```java String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); ``` 完整代码示例: ```java import org.json.*; public class JsonDemo { public static void main(String[] args) { String jsonString = "{\"name\":\"Tom\", \"age\":18}"; JSONObject jsonObject = new JSONObject(jsonString); String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); System.out.println("Name: " + name); System.out.println("Age: " + age); } } ``` 输出结果: ``` Name: Tom Age: 18 ``` 使用第三方库解析JSON也很简单,例如使用FastJSON: 1. 导入FastJSON库 ```java import com.alibaba.fastjson.*; ``` 2. 创建JSON对象 ```java String jsonString = "{\"name\":\"Tom\", \"age\":18}"; JSONObject jsonObject = JSON.parseObject(jsonString); ``` 3. 获取JSON对象的数据 ```java String name = jsonObject.getString("name"); int age = jsonObject.getIntValue("age"); ``` 完整代码示例: ```java import com.alibaba.fastjson.*; public class JsonDemo { public static void main(String[] args) { String jsonString = "{\"name\":\"Tom\", \"age\":18}"; JSONObject jsonObject = JSON.parseObject(jsonString); String name = jsonObject.getString("name"); int age = jsonObject.getIntValue("age"); System.out.println("Name: " + name); System.out.println("Age: " + age); } } ``` 输出结果与前面相同: ``` Name: Tom Age: 18 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值