json.parseobject()的使用详解

一、jsonparseobject泛型

public static <T> T parseObject(String json, Class<T> clazz)

json.parseobject()是阿里巴巴fastjson中的一个方法,其中最重要的参数是json字符串和要转换成的类类型Class<T>,使用这个方法可以将一个JSON字符串转换成指定的java对象

clazz是一个泛型,和json字符串的格式对应,即如果json字符串的格式对应一个java对象,那么就能通过反射构建一个对象,把json字符串中的值填充到这个对象属性中。如果json字符串不是一个标准的json格式,或者json字符串中的属性名在clazz对应的java对象中不存在,都会引起异常。

比如下面的代码,将json字符串转换成一个Person对象:

public class Person {
    private String name;
    private int age;
    private boolean male;
    // getter, setter
}

String jsonStr = "{\"name\":\"Tom\",\"age\":25,\"male\":true}";
Person person = JSON.parseObject(jsonStr, Person.class);

其中的json字符串是一个键值对的格式,对应clazz中Person类的成员变量,最终生成的person对象的属性值如下:

person.name = "Tom";
person.age = 25;
person.male = true;

二、jsonparseobject转对象

public static JSONObject parseObject(String text)

JSON.parseObject()方法还可以将json字符串转换成JSONObject对象。

JSONObject是一个JavaBean,可以使用getter和setter方法获取和设置不同类型的数据,比如字符串、数字等等。与普通的Java对象不同的是,JSONObject的属性名和属性值不需要在定义时指定,而是在使用getter和setter方法时传入。一个JSONObject对象通常用于封装一个json字符串的某一部分数据。

下面是一个使用JSON.parseObject()方法将json字符串转换成JSONObject对象的例子:

String jsonStr = "{\"name\":\"Tom\",\"age\":25,\"male\":true}";
JSONObject jsonObj = JSON.parseObject(jsonStr);
System.out.println(jsonObj.getString("name")); // "Tom"
System.out.println(jsonObj.getIntValue("age")); // 25
System.out.println(jsonObj.getBooleanValue("male")); // true

三、jsonparseobject转对象报错

在使用json.parseobject()方法时,有可能会遇到转换异常的情况,这时候需要根据错误信息来分析原因。

一种常见的错误是:反射时找不到某一个属性,则调用返回null,而null无法转换成基本数据类型或者对象类型,导致异常。

下面是一个在使用json.parseobject()方法时出现异常的例子:

public class User {
    private String username;
    private int age;
    // getter, setter
}

String jsonStr = "{\"username\":\"Tom\"}";
User user = JSON.parseObject(jsonStr, User.class);

运行上述代码会抛出一个“java.lang.NumberFormatException: null”的异常,原因是json字符串中缺少age属性,且age为int类型,没有默认值。为了避免这种异常,可以给age属性设置默认值,如下:

public class User {
    private String username;
    private int age = 0; // 设置默认值
    // getter, setter
}

String jsonStr = "{\"username\":\"Tom\"}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user.getAge()); // 0

四、jsonparseobject转换map报错

json.parseobject()方法还可以将json字符串转换成Map对象。但是在转换过程中,如果属性名为null或者””,在java中这些属性将不能作为Map的key值。因此,可能会出现“java.lang.NullPointerException”异常。

为了避免这种异常,可以将属性名为null或者””的属性移除,或者从json字符串中删除这些属性。

下面是一个在使用json.parseobject()方法时出现异常的例子:

String jsonStr = "{\"name\":\"Tom\",\"\":23}";
Map<String, Object> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){});

运行上述代码会抛出一个“java.lang.NullPointerException”的异常,原因是json字符串中出现了空字符串””的属性名。为了避免这种异常,可以使用remove方法移除属性名为null或者””的属性:

String jsonStr = "{\"name\":\"Tom\",\"\":23}";
JSONObject jsonObj = JSON.parseObject(jsonStr);
jsonObj.remove("");
Map<String, Object> map = JSONObject.toJavaObject(jsonObj, new TypeReference<Map<String, Object>>(){});
System.out.println(map.get("name")); // Tom
System.out.println(map.get("")); // null

五、总结

json.parseobject()是一个非常有用的方法,可以将json字符串转换成Java对象、JSONObject对象或者Map对象。在使用时,需要注意json字符串的格式是否符合要求,需要根据不同的情况调整泛型类型或者修改json字符串。

原创文章,作者:XTCDQ,如若转载,请注明出处:https://www.506064.com/n/361546.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
XTCDQXTCDQ
上一篇 2025-02-25 18:17
下一篇 2025-02-25 18:17

相关推荐

  • JSON的MD5

    在Web开发过程中,JSON(JavaScript Object Notation)是最常用的数据格式之一。MD5(Message-Digest Algorithm 5)是一种常用…

    编程 2025-04-29
  • 使用Java将JSON写入HDFS

    本篇文章将从以下几个方面详细阐述Java将JSON写入HDFS的方法: 一、HDFS简介 首先,先来了解一下Hadoop分布式文件系统(HDFS)。HDFS是一个可扩展性高的分布式…

    编程 2025-04-29
  • 如何使用Newtonsoft datatable转Json

    Newtonsoft DataTable 是一个基于.NET的JSON框架,也是一个用于序列化和反序列化JSON的强大工具。 在本文中,我们将学习如何使用Newtonsoft Da…

    编程 2025-04-28
  • JPRC – 轻松创建可读性强的 JSON API

    本文将介绍一个全新的 JSON API 框架 JPRC,通过该框架,您可以轻松创建可读性强的 JSON API,提高您的项目开发效率和代码可维护性。接下来将从以下几个方面对 JPR…

    编程 2025-04-27
  • Python存为JSON的方法及实例

    本文将从以下多个方面对Python存为JSON做详细的阐述。 一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅…

    编程 2025-04-27
  • 使用Python获取JSON并解析

    本文将介绍如何使用Python获取JSON数据并解析相关内容。通过使用Python的第三方库,我们可以轻松地处理JSON数据,包括读取、提取和操作JSON数据。 一、获取JSON数…

    编程 2025-04-27
  • 使用Spread 8展示JSON数据

    使用Spread 8可以方便地展示JSON数据,本文将详细介绍如何利用Spread 8展示JSON数据。 一、Spread 8简介 Spread 8是一款强大的电子表格软件,可以方…

    编程 2025-04-27
  • 如何在json转实体类时忽略大小写

    本文将从以下几个方面介绍如何在json转实体类时忽略大小写。 一、使用Gson库实现json转实体类忽略大小写 Gson是Google提供的Java JSON操作库,它提供了简单易…

    编程 2025-04-27
  • C# 中 JSON null 不显示的处理方法

    本文将为大家介绍在 C# 中处理 JSON null 不显示的解决方法。 一、null 不显示的问题 在使用 C# 进行 JSON 数据处理的时候,经常会遇到 null 值不显示的…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25

发表回复

登录后才能评论