首页 > Java > java教程 > 正文

如何在Java中解析JSON时忽略未知属性?

王林
发布: 2023-09-07 18:45:02
转载
1490人浏览过

如何在java中解析json时忽略未知属性?

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30
查看详情 Find JSON Path Online

在 Java 中处理 JSON 数据时,开发人员可能会遇到未在相应 Java 类中定义的未知属性或字段。这些未识别的元素可能会在解析过程中产生问题,导致异常或数据丢失。为了解决这个问题,程序员可以采用一种机制来在解析 JSON 时忽略此类未知属性。

正确配置 JSON 解析器可以防止意外属性破坏应用程序的功能。通过跳过无法识别的属性并仅解析与定义的结构匹配的属性,可以以更健壮和灵活的方式解析 JSON 数据。这确保了重要信息不会被忽视,同时不需要的或无效的数据也会被忽略。

JSON

Java 将 JSON(JavaScript 对象表示法)作为一种轻量级且广泛使用的数据交换格式,用于传输和存储结构化数据。其简单且易于人类读取的格式允许表示对象、数组、字符串、数字、布尔值和空值。 JSON 的组成包括使用字符串形式的键的键值对,以减轻其处理负载。

RephraseJava 中的 JSON 格式通常表示为字符串,并使用解析和序列化库在 Java 对象之间进行转换。这些 API 允许将 JSON 字符串解析为 Java 对象,反之亦然,从而实现基于 JSON 的系统和 Java 应用程序之间的集成。这种无缝通信有助于不同系统之间轻松进行数据交换。

方法

在 Java 中解析 JSON 时,有多种方法可以忽略未知属性。以下是一些常用的方法:

  • 带有 ObjectMapper 的 Jackson 库

  • 带有 GsonBuilder 的 Gson 库

  • JSON-B(用于 JSON 绑定的 Java API)

  • 手动解析

带有 ObjectMapper 的 Jackson 库

此方法涉及通过将 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES 功能设置为 false 来配置 ObjectMapper(Jackson 库提供的一个类)。这允许 ObjectMapper 在解析 JSON 时忽略未知属性,从而防止抛出异常。

算法

  • 创建 ObjectMapper 的实例。

  • 配置 ObjectMapper 以将 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES 功能设置为 false。

  • 使用ObjectMapper将JSON数据解析为所需的Java对象。

示例

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
   public static void main(String[] args) throws Exception {
      String jsonString = "{"name": "John", "age": 25, "unknownProperty": "Value"}";

      ObjectMapper objectMapper = new ObjectMapper();
 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

      Person person = objectMapper.readValue(jsonString, Person.class);
      System.out.println(person);
   }
}

class Person {
   private String name;
   private int age;

   // Getters and setters

   @Override
   public String toString() {
      return "Person{" +
            "name='" + name + ''' +
            ", age=" + age +
            '}';
   }
}
登录后复制

输出

Person{name='John', age=25}
登录后复制

带有 GsonBuilder 的 Gson 库

要在此方法中使用 Gson 库,需要使用 GsonBuilder 类创建一个 Gson 实例。这可以通过调用参数为 true 的 setIgnoreUnknownProperties() 方法来实现。这样做会指示 Gson 在 JSON 解析期间忽略未知属性,确保它们不会被视为错误。

算法

  • 创建 GsonBuilder 的实例。

  • 在 GsonBuilder 实例上调用 setIgnoreUnknownProperties(true) 方法。

  • 使用 GsonBuilder 构建 Gson 对象。

  • 使用Gson对象将JSON数据解析为所需的Java对象。

示例

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class GsonExample {
   public static void main(String[] args) {
      String jsonString = "{"name": "John", "age": 25, "unknownProperty": "Value"}";

      Gson gson = new GsonBuilder()
            .setIgnoreUnknownProperties(true)
            .create();

      Person person = gson.fromJson(jsonString, Person.class);
      System.out.println(person);
   }
}

class Person {
   private String name;
   private int age;

   // Getters and setters

   @Override
   public String toString() {
      return "Person{" +
            "name='" + name + ''' +
            ", age=" + age +
            '}';
   }
}
登录后复制

输出

Person{name='John', age=25}
登录后复制

JSON-B(用于 JSON 绑定的 Java API)

要使用 JSON-B 忽略未知属性,表示 JSON 结构的 Java 类需要在应忽略的字段或属性上使用 @JsonbTransient 进行注释。此注释通知 JSON-B 库在 JSON 解析过程中跳过这些属性。

算法

  • 在要忽略的字段或属性上使用 @JsonbTransient 注释表示 JSON 结构的 Java 类。

  • 使用 JSON-B 实现将 JSON 数据解析为所需的 Java 对象。

示例

import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;

public class JsonBExample {
   public static void main(String[] args) {
      String jsonString = "{"name": "John", "age": 25, "unknownProperty": "Value"}";

      Jsonb jsonb = JsonbBuilder.create();

      Person person = jsonb.fromJson(jsonString, Person.class);
      System.out.println(person);
   }
}

class Person {
   private String name;
   private int age;

   // Getters and setters

   @Override
   public String toString() {
      return "Person{" +
            "name='" + name + ''' +
            ", age=" + age +
            '}';
   }
}
登录后复制

输出

Person{name='John', age=25}
登录后复制

手动解析

要使用 org.json 或 json-simple 等库解析 JSON 数据,开发人员遵循手动迭代 JSON 对象的键和值的方法。通过有选择地处理已识别的属性并忽略未知的属性,开发人员可以自定义他们所需的解析行为。

算法

  • 使用 org.json 或 json-simple 等 JSON 库将 JSON 数据解析为 JSON 对象。

  • 迭代 JSON 对象的键和值。

  • 处理已识别的属性并在迭代期间忽略任何未识别或未知的属性。

示例

import org.json.JSONObject;

public class ManualParsingExample {
   public static void main(String[] args) {
      String jsonString = "{"name": "John", "age": 25, "unknownProperty": "Value"}";

      JSONObject jsonObject = new JSONObject(jsonString);

      String name = jsonObject.optString("name");
      int age = jsonObject.optInt("age");

      Person person = new Person();
      person.setName(name);
      person.setAge(age);

      System.out.println(person);
   }
}

class Person {
   private String name;
   private int age;

   // Getters and setters

   @Override
   public String toString() {
      return "Person{" +
            "name='" + name + ''' +
            ", age=" + age +
            '}';
   }
}
登录后复制

输出

Person{name='John', age=25}
登录后复制

结论

在本教程中,在 Java 中解析 JSON 时,适当处理未知属性以确保数据处理的稳健性和灵活性非常重要。通过使用 Jackson 配置 ObjectMapper、使用 Gson 和 GsonBuilder、利用 JSON-B 注释或手动解析 JSON 数据等方法,开发人员可以有效地忽略未知属性并减轻在 Java 中解析 JSON 时潜在的问题。

以上就是如何在Java中解析JSON时忽略未知属性?的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:tutorialspoint网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号