fastjson理解和使用-初级

这篇博客详细介绍了Fastjson的使用,包括JSONObject、JSONArray的常见操作,JSON类的转化功能,以及如何将JSON字符串转换为JavaBean,特别讨论了三种不同的转化方法,并给出了具体的代码示例和执行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSONObject类

JSON的子类,底层实现了map接口
在这里插入图片描述
主要用途
JSONObject相当于json对象,该类中主要封装了各种get方法,通过"键:值"对中的键来获取其对应的值。
在这里插入图片描述
举例
获取以下的value
在这里插入图片描述
代码思路:json字符串先转成JSONObject对象,在用其get方法获取到值

  private static final String JSON_OBJ_STR = "{ \"contentName\":\" 我是内容名称\"," + "\"frepType\": \"DEFAULT\"}";

  // json字符串与JSONObject之间的转换
  public static void JsonStrToJSONObject() {
    JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);
    System.out.println("contentName: " + jsonObject.getString("contentName") + "," + "frepType: "
        + jsonObject.getString("frepType"));
  }

执行结果
在这里插入图片描述

JSONArray类

JSON的子类,底层实现了list接口
在这里插入图片描述
主要用途
JSONArray代表json对象数组,json数组对象中存储的是一个个json对象,所以类中的方法主要用于直接操作json对象,比如add()和remove()等等。里面也会有get(),但更多使用的场景是getJSONObject(int index),可以获取指定位置的JSONObject对象,配合for循环或者迭代器
在这里插入图片描述
在这里插入图片描述
举例:
获取数组里面的值
代码思路

  public static void JSONArrayToJSONStr() {
    // 将json数字字符串转化为JSONArray
    JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR);
    /**
     * 处理思路: 
     * 看到方括号就反应过来是要用JSONArray来接收准备要解析的数组字符串JSON_ARRAY_STR,具体是get(*)来获取指定位置的对象
     * JSONArray实际上是一个list,那就对应有两种方式来取值:for循环和迭代器
     * 看到花括号就要反应过来是JSONObject,利用其get方法来获取value
     * 
     */
    // for循环
    // for(int i = 0;i < jsonArray.size;i++){
    // JSONObject jsonObject = jsonArray.getJSONObject(i);
    // System.out.println("subjectName: " + jsonObject.getString("subjectName") +
    // ",subjectId: " + jsonObject.getLong("subjectId"));
    // }
    // 迭代器
    Iterator<Object> iterator = jsonArray.iterator();
    while (iterator.hasNext()) {
      JSONObject jsonObject = (JSONObject) iterator.next();
      System.out.println("subjectName: " + jsonObject.getString("subjectName") + ",subjectId: "
          + jsonObject.getLong("subjectId"));
    }
  }

执行结果
在这里插入图片描述

JSON类

在这里插入图片描述
主要用途
实现json对象,json对象数组,javabean对象三个和json字符串之间的相互转化
都是用toJSONString这个方法
举例

  public static void JSONObjectToJSONString() {
    //将json字符串转为json对象
    JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);
    //将json对象转化成json字符串
    String s = JSON.toJSONString(jsonObject);
    System.out.println(s);
    
    // 将json数字字符串转化为JSONArray
    JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR);
    // 将JSONArray转化为json数字字符串
    System.out.println(JSON.toJSONString(jsonArray));
  }

那么来看一段复杂的json解析出来,完整的操作一下

如下,要取这个值
在这里插入图片描述
代码过程如下

private static final String JSON_HARD_js = "{\"cdpContents\":[{\"cities\":{\"all\":\"全国\"},\"contentMaterials\":[{\"clickUrl\":\"www.baidu.com\",\"materialType\":\"IMAGE_URL\",\"materials\":\"1\"}],\"contentSubTime\":[],\"contentName\":\"我是内容名称\",\"frepType\":\"DEFAULT\",\"gmtEnd\":\"20180627235959\",\"gmtStart\":\"20180627000000\",\"officialContentId\":\"\",\"spaceAttribute\":{}}]}";
  //花括号用JSONObject来接收,方括号用JSONArray来接收
  
  public static void Parse_demo() {
    JSONObject json_one = JSON.parseObject(JSON_HARD_js);
    JSONArray one_value = json_one.getJSONArray("cdpContents");
    System.out.println(JSON.toJSONString(one_value));
    JSONObject two_value = one_value.getJSONObject(0);
    System.out.println(JSON.toJSONString(two_value));
    JSONArray three_value = two_value.getJSONArray("contentMaterials");
    System.out.println(JSON.toJSONString(three_value));
    JSONObject four_value = three_value.getJSONObject(0);
    System.out.println(JSON.toJSONString(four_value));
    System.out.println(four_value.getString("materialType"));

  }

结果如下(注意左侧的花括号和方括号)
控制台查看逐步解析的过程
在这里插入图片描述

JavaBean——JSON字符串转为JavaBean(推荐反射方法)

定义:
1、这个类必须具有一个公共的(public)无参构造函数;
2、所有属性私有化(private);
3、私有化的属性必须通过public类型的方法(getter和setter)暴露给其他程序,并且方法的命名也必须遵循一定的命名规范。
4、这个类应是可序列化的。(比如可以实现Serializable 接口,用于实现bean的持久性)
简单的理解是这个类是是要按照一定规范来写,关注它本身——它实际上还是一个类。
那么我们定义一个Activity类
注意:
这边必须重写toString的方法

public class Activity {
  public String getActivityNname() {
    return activityName;
  }

  public void setActivityNname(String activityNname) {
    this.activityName = activityNname;
  }

  public int getActivityNumber() {
    return activityNumber;
  }

  public void setActivityNumber(int activityNumber) {
    this.activityNumber = activityNumber;
  }

  private String activityName;
  private int activityNumber;

  public Activity(String activityName, int activityNumber) {
    this.activityName = activityName;
    this.activityNumber = activityNumber;
  }

  public String toString() {
    System.out.println(
        "Activity{" + "activityName='" + activityName + '\'' + ", activityNumber=" + activityNumber + '}');
    return "Activity{" + "activityName='" + activityName + '\'' + ", activityNumber=" + activityNumber + '}';
  }
}

运行结果:
在这里插入图片描述

再看第二种方式:

通过反射来实现转化

Activity activity_Gson = JSON.parseObject(JSON_OBJ_STR2, Activity.class);
    activity_Gson.toString();

运行结果:
在这里插入图片描述

最后看第三种方式:

使用TypeReference

   Activity activity_tr = JSON.parseObject(JSON_OBJ_STR2, new TypeReference<Activity>() {
    });
    activity_tr.toString();

运行结果
在这里插入图片描述

JavaBean——json数组字符串和javabean-list之间的转化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值