📅  最后修改于: 2023-12-03 15:10:27.031000             🧑  作者: Mango
在处理 JSON 数据时,我们有时会遇到 JSON 中包含一些无法识别的属性,这些属性可能是新添加的、不规范的,或者是在不同语言之间进行数据传输时造成的。
在 Java 中,可以使用 Jackson 库 来处理 JSON 数据,它提供了一组简单易用的 API。
下面是一个演示如何处理无法识别属性的示例代码:
ObjectMapper objectMapper = new ObjectMapper();
// 配置忽略未知属性
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
String json = "{\"name\": \"John Smith\", \"age\": 30, \"gender\": \"male\", \"unknownAttr\": \"unknown\"}";
try {
User user = objectMapper.readValue(json, User.class);
System.out.println(user);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
// User 类
public class User {
private String name;
private int age;
private String gender;
// getters and setters
}
代码输出结果为:
User{name='John Smith', age=30, gender='male'}
可以看到,通过配置 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
属性为 false,使得 Jackson 库在反序列化 JSON 数据时忽略未知属性。这样即使 JSON 中包含无法识别的属性也不会造成程序异常。
在 Javascript 中,可以使用 JSON.parse() 方法解析 JSON 数据。
下面是一个演示如何处理无法识别属性的示例代码:
const json = '{"name": "John Smith", "age": 30, "gender": "male", "unknownAttr": "unknown"}';
let user;
try {
user = JSON.parse(json);
console.log(user);
} catch (e) {
console.error(e);
}
// User 对象
class User {
constructor(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
}
可以看到,当执行 JSON.parse() 解析 JSON 数据时会抛出异常,因为包含了无法识别的属性。解决方法是使用一个中间变量将 JSON 数据转成对象,然后再将其映射到实际需要的数据对象中。
const json = '{"name": "John Smith", "age": 30, "gender": "male", "unknownAttr": "unknown"}';
let jsonObj;
try {
jsonObj = JSON.parse(json);
} catch (e) {
console.error(e);
}
const user = new User(jsonObj.name, jsonObj.age, jsonObj.gender);
console.log(user);
输出结果为:
User { name: 'John Smith', age: 30, gender: 'male' }
这样即使 JSON 中包含无法识别的属性也能正确处理。