📜  无法识别的 json 属性 java - Javascript (1)

📅  最后修改于: 2023-12-03 15:10:27.031000             🧑  作者: Mango

无法识别的 JSON 属性 Java - Javascript

在处理 JSON 数据时,我们有时会遇到 JSON 中包含一些无法识别的属性,这些属性可能是新添加的、不规范的,或者是在不同语言之间进行数据传输时造成的。

Java 中的处理方式

在 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 中的处理方式

在 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 中包含无法识别的属性也能正确处理。