You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无Jackson库、无Maven/Gradle的JavaFX项目如何反序列化JSON到Task对象

没问题!既然没法用Jackson这类第三方库,咱们完全可以用JDK自带的工具来搞定,甚至极端情况下手动解析也行。下面给你两种实用方案:

方案1:使用JDK内置的javax.json包(推荐)

从Java 7开始,JDK就自带了javax.json这个标准JSON处理包,JavaFX项目不用额外加依赖就能直接用,比手动解析靠谱多了。

下面是适配你Task类的代码:

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;

private static Task convert(String json) {
    // 用StringReader把JSON字符串转换成可读流
    try (JsonReader jsonReader = Json.createReader(new StringReader(json))) {
        JsonObject jsonObject = jsonReader.readObject();
        
        // 逐个提取字段,注意类型转换
        Long id = jsonObject.getJsonNumber("id").longValue();
        // 如果担心字段缺失,可以用optString设置默认值,比如optString("title", "")
        String title = jsonObject.getString("title");
        String content = jsonObject.getString("content");
        
        // 实例化Task并返回
        return new Task(id, title, content);
    } catch (Exception e) {
        // 这里可以根据业务需求处理异常,比如抛自定义异常或者返回null
        e.printStackTrace();
        return null;
    }
}

这个方案的优势是类型安全,能自动处理JSON的格式细节,比如转义字符、数字类型转换,还能轻松应对字段缺失的场景(用optXxx系列方法就行)。

方案2:手动字符串解析(仅适用于极简JSON)

如果你的运行环境连javax.json都没法用(这种情况很少见),可以试试手动切割字符串,但这个方法非常脆弱,只适合结构完全固定、没有嵌套、字段值里不含逗号或双引号的JSON。

代码示例:

private static Task convert(String json) {
    // 先去掉JSON首尾的大括号
    json = json.trim().substring(1, json.length() - 1);
    // 按逗号分割字段(注意:如果字段值里有逗号,这一步直接崩)
    String[] fields = json.split(",");
    
    Long id = null;
    String title = null;
    String content = null;
    
    for (String field : fields) {
        // 只分割第一个冒号,避免字段值里的冒号搞乱解析
        String[] keyValue = field.split(":", 2);
        // 去掉键值对的引号和空格
        String key = keyValue[0].trim().replace("\"", "");
        String value = keyValue[1].trim().replace("\"", "");
        
        switch (key) {
            case "id":
                id = Long.parseLong(value);
                break;
            case "title":
                title = value;
                break;
            case "content":
                content = value;
                break;
        }
    }
    
    return new Task(id, title, content);
}

⚠️ 注意:如果你的JSON内容里有任何复杂情况(比如content字段值包含逗号"content":"Buy milk, eggs"),这个方法会直接解析错误,所以除非万不得已,优先用方案1。

另外补充个小细节:你的Task类只有带参数的构造方法,所以解析时要确保所有字段都能正确提取,不然会抛出NullPointerException。如果JSON可能缺失某些字段,记得在解析时做判空处理哦~

内容的提问来源于stack exchange,提问作者EnumGame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:13:24