开发者社区 问答 正文

在没有Jackson库的情况下将Json反序列化为Java Object

我有没有Maven和Gradle的JavaFX项目,所以我不能添加jackson依赖项。我需要反序列化从服务器到对象Task的String中的Json。这是用Jackson库进行反序列化的代码:

private static Task convert(String json) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();

        Task task = objectMapper.readValue(json, Task.class);
        return task;
    }

但是如果没有那个库怎么办呢?

任务类别:

public class Task {
    private Long id;
    private String title;
    private String content;

    public Task(Long id, String title, String content) {
        this.id = id;
        this.title = title;
        this.content = content;
    }

    public Long getId() {
        return this.id;
    }

    public String getTitle() {
        return this.title;
    }

    public String getContent() {
        return this.content;
    }
}

展开
收起
垚tutu 2019-12-19 16:32:07 508 分享 版权
阿里云 AI 助理回答

如果你不能或不想使用Jackson库来反序列化JSON,Java自身提供了一个名为javax.json的模块(在Java EE中或者作为独立的Java JSON Processing API库提供),或者你可以使用其他轻量级的库如Gson、org.json等。这里我将展示如何不依赖于外部库(仅使用Java标准库)以及如何使用Gson库来实现你的需求。

使用Java标准库(非推荐,因为解析复杂且容易出错)

由于Java标准库没有直接提供方便的JSON解析到对象的功能,你需要手动解析JSON字符串。这通常涉及到分割字符串和逐个设置对象属性,非常繁琐且易错。但为了完整性,这里是一个简化的示例,实际应用中可能需要更复杂的逻辑来处理嵌套结构和数据类型转换:

public static Task convertWithoutLibrary(String json) {
    // 这里简化处理,实际情况可能需要正则表达式或更复杂的解析
    String[] parts = json.split(",");
    for (String part : parts) {
        String[] keyValue = part.split(":");
        String key = keyValue[0].replaceAll("\"", "").trim();
        String value = keyValue[1].replaceAll("\"", "").trim();

        switch (key) {
            case "id":
                Long id = Long.parseLong(value);
                // 注意:此处假设Task类有setter方法,如果没有请自行调整
                // task.setId(id);
                break;
            case "title":
                // task.setTitle(value);
                break;
            case "content":
                // task.setContent(value);
                break;
            default:
                // 处理未知字段
                break;
        }
    }

    // 由于上面只是示例,实际上你还需要创建Task实例并正确设置所有值
    // return task;
}

使用Gson库

Gson是Google提供的一个用来在Java对象和JSON数据之间进行映射的Java库。它比Java标准库的方法简单得多,也更健壮。首先,你需要将其添加为项目的依赖项。如果你不能通过Maven或Gradle管理依赖,可以手动下载Gson的jar文件并添加到你的项目类路径中。

添加Gson依赖(如果能用Maven或Gradle的话)

Maven:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.9</version>
</dependency>

Gradle:

implementation 'com.google.code.gson:gson:2.8.9'

使用Gson反序列化

import com.google.gson.Gson;

public class JsonDeserializationExample {

    public static void main(String[] args) {
        String json = "{\"id\":1,\"title\":\"Example Task\",\"content\":\"This is an example\"}";
        try {
            Task task = convertWithGson(json);
            System.out.println(task.getId() + ", " + task.getTitle() + ", " + task.getContent());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Task convertWithGson(String json) {
        Gson gson = new Gson();
        return gson.fromJson(json, Task.class);
    }
}

在这个例子中,convertWithGson方法展示了如何使用Gson库轻松地将JSON字符串转换为Task对象。您也可以通过ECS一键诊断全面排查并修复ECS问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答