Java JSON 解析全面指南

news/2025/2/10 6:08:41/文章来源:https://www.cnblogs.com/happy-coding/p/18707026

目录

  1. 简介
  2. Java 解析 JSON 的方式
    • 使用 org.json
    • 使用 Jackson
    • 使用 Gson
    • 使用 Fastjson
  3. JSON 解析与序列化示例
    • 对象转 JSON
    • JSON 转对象
    • JSON 数组解析
  4. 最佳实践
  5. 小结
  6. 参考资料

简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和易解析性。在 Java 生态中,解析 JSON 主要有以下几种方式:

  • org.json:官方提供的轻量级 JSON 处理库。
  • Jackson:功能强大,支持序列化、反序列化和数据绑定,是业界标准之一。
  • Gson:由 Google 提供,易用性强,适用于 Android 和 Java 项目。
  • Fastjson:阿里巴巴开发的高性能 JSON 处理库,适用于高并发应用场景。

接下来,我们将详细介绍如何在 Java 中使用这些库来解析和生成 JSON。


Java 解析 JSON 的方式

使用 org.json

org.json 是最简单的 JSON 解析库,适合轻量级应用。

依赖

<dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20210307</version>
</dependency>

示例

import org.json.JSONObject;public class OrgJsonExample {public static void main(String[] args) {String jsonStr = "{\"name\":\"Alice\",\"age\":25}";// 解析 JSON 字符串JSONObject jsonObject = new JSONObject(jsonStr);System.out.println("姓名: " + jsonObject.getString("name"));System.out.println("年龄: " + jsonObject.getInt("age"));// 生成 JSONJSONObject newJson = new JSONObject();newJson.put("city", "Beijing");newJson.put("country", "China");System.out.println(newJson.toString());}
}

使用 Jackson

Jackson 是最流行的 JSON 处理库,功能强大,支持对象与 JSON 互转。

依赖

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version>
</dependency>

示例

import com.fasterxml.jackson.databind.ObjectMapper;public class JacksonExample {public static void main(String[] args) throws Exception {ObjectMapper objectMapper = new ObjectMapper();// JSON 转对象String jsonStr = "{\"name\":\"Alice\",\"age\":25}";User user = objectMapper.readValue(jsonStr, User.class);System.out.println(user);// 对象转 JSONString jsonOutput = objectMapper.writeValueAsString(user);System.out.println(jsonOutput);}
}class User {public String name;public int age;public User() {} // Jackson 需要默认构造器@Overridepublic String toString() {return "User{name='" + name + "', age=" + age + "}";}
}

使用 Gson

Gson 由 Google 提供,API 简洁,适合 Android 项目。

依赖

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

示例

import com.google.gson.Gson;public class GsonExample {public static void main(String[] args) {Gson gson = new Gson();// JSON 转对象String jsonStr = "{\"name\":\"Alice\",\"age\":25}";User user = gson.fromJson(jsonStr, User.class);System.out.println(user);// 对象转 JSONString jsonOutput = gson.toJson(user);System.out.println(jsonOutput);}
}

使用 Fastjson

Fastjson 是阿里巴巴的高性能 JSON 解析库,适用于高并发场景。

依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.39</version>
</dependency>

示例

import com.alibaba.fastjson.JSON;public class FastjsonExample {public static void main(String[] args) {// JSON 转对象String jsonStr = "{\"name\":\"Alice\",\"age\":25}";User user = JSON.parseObject(jsonStr, User.class);System.out.println(user);// 对象转 JSONString jsonOutput = JSON.toJSONString(user);System.out.println(jsonOutput);}
}

JSON 解析与序列化示例

对象转 JSON

使用 Jackson:

ObjectMapper objectMapper = new ObjectMapper();
User user = new User("Alice", 25);
String jsonString = objectMapper.writeValueAsString(user);
System.out.println(jsonString);

使用 Gson:

Gson gson = new Gson();
String jsonString = gson.toJson(user);
System.out.println(jsonString);

JSON 转对象

使用 Jackson:

User user = objectMapper.readValue(jsonString, User.class);

使用 Gson:

User user = gson.fromJson(jsonString, User.class);

JSON 数组解析

String jsonArrayStr = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
List<User> users = objectMapper.readValue(jsonArrayStr, new TypeReference<List<User>>() {});
System.out.println(users);

最佳实践

  1. 选择合适的 JSON 库

    • 轻量级应用:org.json
    • 全面功能:Jackson
    • Android 应用:Gson
    • 高性能需求:Fastjson
  2. 使用对象映射

    • 避免 Map<String, Object>,推荐使用 POJO(Plain Old Java Object)。
  3. 处理异常

    • JSON 解析时可能会抛出 JSONExceptionIOException,应使用 try-catch 进行异常处理。
  4. 使用 @JsonProperty

    • 在 Jackson 中,字段名与 JSON 不匹配时,可使用 @JsonProperty("json_name") 注解。
  5. 优化性能

    • 在高并发场景下,可使用 Jackson 的 ObjectMapper 作为单例对象。

小结

本篇文章介绍了 Java 解析 JSON 的几种方式,包括 org.jsonJacksonGsonFastjson,并提供了详细的示例和最佳实践。希望对你有所帮助!


参考资料

  1. Jackson 官方文档
  2. Gson 官方文档
  3. Fastjson 官方文档
  4. 在线JSON美化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/881522.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

护眼神器!LightBulb电脑屏幕护眼软件,你值得拥有!

点击上方蓝字关注我 前言 LightBulb是一个免费的护眼软件,它可以帮助我们在晚上或长时间看电脑屏幕时,减少眼睛的不舒服和疲劳。这个软件会随着一天时间的推移,自动调整电脑屏幕的颜色。比如,在白天,它会让屏幕颜色更偏向冷蓝色,就像阳光下的颜色;到了晚上,它会让屏幕颜…

【JWT安全】攻防指南全面梳理

一、简单介绍 JWT(JSON Web Token)是一种用于身份认证和授权的开放标准,它通过在网络应用间传递被加密的JSON数据来安全地传输信息使得身份验证和授权变得更加简单和安全,JWT对于渗透测试人员而言可能是一种非常吸引人的攻击途径,因为它们不仅是让你获得无限访问权限的关键而…

【CodeForces训练记录】Codeforces Round 1003 (Div. 4)

训练情况赛后反思 题面读的有点疑惑,怀疑自己阅读理解不大行了,简单题狂WA,C2二分调半天没出,水平严重退步 A题 最后两个字母 us 换成 i点击查看代码 #include <bits/stdc++.h> // #define int long long #define endl \nusing namespace std;void solve(){string s;…

[流程图/技术调研] drawio : 流程图绘制工具

引言 流程图绘制工具: draw.io 简介urlhttps://www.drawio.com/ (官网首页) https://github.com/jgraph/drawio (github)【官网简介】 drawio 这个项目,是一个可配置的图表/白板可视化应用程序。drawio 是由 JGraph Ltd 和 draw AG 共同拥有和开发的。 在运行这个项目的同时,…

国家中小学智慧教育平台新教材及音频下载神器

点击上方蓝字关注我 前言 国家中小学智慧教育平台是一个专门给老师、孩子们提供学习资源的网站,上面有很多专业的教学视频、课件和教材。不过,这些学习资料都只能在网上看,如果没有网络就连不上了。 而这个下载器的作用就像是一个“搬运工”,它可以把这些网上的视频、课件和…

【牛客训练记录】牛客周赛 Round 80

训练情况赛后反思 玩了一两天发现自己水平直接下降一个档次,简单的C题模拟没写出来 A题 直接判断剩下还能放几个棋子,如果小于零就无法放置,否则直接输出即可点击查看代码 #include <bits/stdc++.h> // #define int long long #define endl \nusing namespace std;voi…

【蓝桥训练记录】第 26 场 蓝桥入门赛

训练情况赛后反思 唐完了,二分没看出来 A题 字母排序点击查看代码 #include <iostream> using namespace std; int main() {cout<<"aekns";return 0; }B题 统计两个字符串中 01 的数量,异或找两个不同的数字的出现次数取最小值,再求和即可点击查看代码…

手把手教你一招永久解决DeepSeek服务器繁忙!

前几天A梦分享过DeepSeek的三种使用方式:移动应用APP、网页版本和本地部署。由于DeepSeek的用户数量庞大,导致请求频次较高,用户常常会遇到"服务器繁忙,请稍后重试"的提示。而选择本地部署则可以避免这种问题,并且支持离线使用。正因如此,官方推荐用户选择本地…

[AI/GPT] AI大模型的基础概念

概述:AI大模型 基础概念 幻觉现象 = 一本正经胡说八道AI幻觉,是指大语言模型【编造】它认为是真实存在的、甚至看起来合理或可信的信息。 大模型出现幻觉,简而言之就是“胡说八道”。 准确而言,是指模型生成的内容与现实世界事实或用户输入不一致的现象。 研究人员将大模型…

Nacos的应用案例实战

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.Nacos实现服务注册和发现实战案例1.部署Nacos集群2.运行服务提供者的JAVA应用2.1 安装JDK2.2 安装Maven2.3 解压准备好的JAVA示例应用2.4 查看Nacos服务相关配置是否正确信息2.5 编译JAVA代码2.6 运行…

前端如何判断浏览器 AdBlock/AdBlock Plus(最新版)广告屏蔽插件已开启拦截

前端如何判断浏览器 AdBlock/AdBlock Plus(最新版)广告屏蔽插件已开启拦截2个月前AdBlock/AdBlock Plus疑似升级了一次因为自己主要负责面对海外的用户项目,发现以前的检测AdBlock/AdBlock Plus开启状态方法已失效了,于是专门研究了一下。并尝试了很多方法。 已失效的老方法…

[Whole Web] 前端项目规范 -- 4. Git提交信息规范(Commitlint + commitizen + cz-git)

前面讲的都是在git提交之前的一些流程检查,而当我们git提交的时候,提交信息,也应该是需要规范的 commitlint 在使用Git提交代码时,通常都需要填写提交说明,也就是Commit Message git commit -m 提交测试说白了,Commit Message就是我们提交的时候,在-m后面写的提交说明,…