无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
相关产品推荐
相关产品推荐

