Java 解析多层嵌套json数据及json字符串与对象的相互转换

文章目录

  • 前言
  • 一、基本语法
    • 1.格式要求
    • 2.value的取值语法
    • 3.JSON对象与字符串相互转换
  • 二、取值示例
    • 1.构造数据
    • 2.读取数据
  • 总结

前言

本文主要介绍java解析多层嵌套json数据以及字符串与JSON对象之间的相互转换,包括:json字符串的取值,json对象与字符串的相互转换,字符串转化为java对象,字符串转化为javaList列表等。

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

一、基本语法

1.格式要求

  • 数据格式:JSON实际上就是键值对(“key” : “value”)
  • 数据要求:key必须是字符串,value可以是字符串、数字、对象、数组、布尔值或null

2.value的取值语法

  • 字符串,jsonObject.getString(“key”)
  • 数字,jsonObject.getIntValue(“key”) 或者 jsonObject.getInteger(“key”) 与之对应的数据类型
  • 布尔值,jsonObject.getBooleanValue(“key”)
  • 数组,jsonObject.getJSONArray(“key”)
  • Object 对象,jsonObject.get(“key”)
  • JSONObject 对象,jsonObject.getJSONObject(“key”)

3.JSON对象与字符串相互转换

  • 用的是fastjson解析,pom文件
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.0</version>
</dependency>
  • Object对象转Json字符串:JSON.toJSONString(Object object);
JSONObject jsonObject = buildJSONObject(); // 构造的json对象
String jsonString = JSON.toJSONString(jsonObject);
  • Json字符串转Object对象:JSON.parseObject(String str);
JSONObject jsonObject = buildJSONObject(); // 构造的json对象
String jsonString = JSON.toJSONString(jsonObject);
JSONObject jsonObject1 = JSON.parseObject(jsonString);
  • 将字符串转为JSONArray:JSON.parseArray(arrayStr);
String arrayStr = "......";
JSONArray array = JSON.parseArray(arrayStr);
  • 将字符串转为具体的单个java对象:JSON.parseObject(String text, Class clazz);
String userString = "{\"name\":\"libai\"}";
User user1 = JSON.parseObject(userString, User.class);
// 或者
User user2 = JSON.parseObject(userString).toJavaObject(User.class);
// 再或者使用JSONObject替换JSON也可,即JSONObject.parseObject(userString, User.class);
@Data
static class User {
    private String name;
}
  • 将字符串转为具体的java List列表:JSONObject.parseArray(“字符串”).toJavaList(User.class);
String userListString = "[{\"name\":\"1\"},{\"name\":\"12\"}]";
List<User> userList = JSONObject.parseArray(userListString).toJavaList(User.class);

二、取值示例

1.构造数据

构造如下数据,有字符串、数组、对象等

private static JSONObject buildJSONObject() {
    // 构造JSONObject对象
    JSONObject jsonObject = new JSONObject();
    // value为字符串及数字
    jsonObject.put("name", "website");
    jsonObject.put("age", 18);

    // 构造JSONArray对象
    JSONArray jsonArray = new JSONArray();
    // JSONArray里面有JSONObject对象
    JSONObject jsonArrayObject1 = new JSONObject();
    jsonArrayObject1.put("name", "alibaba");
    jsonArrayObject1.put("info", "www.alibaba.com");
    JSONObject jsonArrayObject2 = new JSONObject();
    jsonArrayObject2.put("name", "baidu");
    jsonArrayObject2.put("info", "www.baidu.com");
    jsonArray.add(jsonArrayObject1);
    jsonArray.add(jsonArrayObject2);
	// value为JSONArray对象
    jsonObject.put("sites",jsonArray);

    JSONObject jsonObject2 = new JSONObject();
    jsonObject2.put("name", "blog.csdn.net");
	// value为JSONObject对象
    jsonObject.put("site", jsonObject2);
    return jsonObject;
}

2.读取数据

  • 取出 website 字符串及 18 数字
System.out.println(jsonObject.get("name"));			// 直接get返回的是Object对象
System.out.println(jsonObject.getString("name"));	// getString返回的是字符串
System.out.println(jsonObject.getIntValue("age"));  // getIntValue返回的是int类型
  • 取出 blog.csdn.net,即对象里面的字符串
// 直接getJSONObject获取到site的对象,再getString获取name的值
System.out.println(jsonObject.getJSONObject("site").getString("name"));	
  • 取出 alibaba,即数组里第一个对象里面的字符串
// getJSONArray获取sites的数组,再getJSONObject(0)获取数组中第一个对象,再getString获取name值
System.out.println(jsonObject.getJSONArray("sites").getJSONObject(0).getString("name"));

总结

人生没有完满,始终存在残缺,自己的心地是自己的世界,活得不快乐,本质上源于自己的无能。一个人,应该有力量,将自己从一切沉重的、老旧的、无精打采的事物里拔出来,用不断的尝试、变通改变自己的境遇。

版权声明:本文为博主作者:睡个好觉”原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_60713320/article/details/134579411

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2024年1月6日
下一篇 2024年1月6日

相关推荐