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

2023年 9月 7日 84.2k 0

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

在 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时忽略未知属性?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论