CRUD 崽怎么了?
精通 CRUD 还怕找不到工作嘛?
giao, 最近跟其他项目对接老是要用 JSON, 什么解析 JSON 字符串, 什么对象转 JSON 格式字符串, 听着阿夜我真是头秃.
说起 Java 操作 JSON, 第一个映入我眼眶的不是阿里爸爸的 fastjson, 而是 JSON-lib. 接触这个是去年刚进公司时从前辈遗留的代码中看到的 (失误失误前辈健在, 只是头发快没了, 说起这个话我不由得摸了摸头皮).
当时觉得真好用呐, 它的 maven 配置是这样的:
- <dependency>
- <groupId.NET.sf.JSON-lib</groupId>
- <artifactId>JSON-lib</artifactId>
- <version>2.4</version>
- <classifier>jdk15</classifier>
- </dependency>
操作数据是这样的:
- public static void main(String[] args) {
- String jsonStr = "{\"id\":1,\"name\":\"eknown\"}";
- // JSON 字符串转 JSON 对象
- JSONObject obj = JSONObject.fromObject(jsonStr);
- // 操作 JSON 对象
- System.out.println(obj.get("id"));
- obj.element("roleList", "[1,2,3]");
- // JSON 对象转 JSON 字符串
- System.out.println(obj.toString());
- }
但是今天查阅资料的时候发现有文章提到 JSON-lib 有这样一个问题: 在 JSON 字符串数据较大时, 由于 JSON-lib 会对当前解析位置到字符串末尾进行 substring 操作, 在 JDK1.7 以上的环境中, 会进行大量的字符串复制操作, 导致大量的 CPU 和内存消耗, 严重的甚至会 Full GC.
吓得夜仔我当场差点休克 -- 我负责的三个已上线的项目, 都使用了 JSON-lib 来解析字符串, 甚至, 在某个接口中, 进行了非常多的 JSON 解析操作. ヽ (*.>Д<)o ゜
以后还是改用更快更省内存的 JSON 库吧, 比如 fastjson, 听这名字就很快呐!
Giao, 但是 fastjson 前阵子不是爆出一堆严重漏洞嘛?
原谅夜仔我久居深山老林, 每日 CRUD, 不问外间事.
幸好幸好, 那帮猿已经紧急修复了漏洞了, 只要将版本升级到 1.2.60 及以上就可以啦!
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.60</version>
- </dependency>
这里给出一个简单的示例, 毕竟夜我这帅都是每天枸杞泡茶保养的效果啦, 不能熬夜哦.
- package jsonparse;
- import com.alibaba.fastjson.JSONObject;
- /**
- * @author zhangfanghao
- * @version 1.0
- * @date 2019-12-17 20:04
- */
- public class FastJsonParseDemo {
- public static void main(String[] args) {
- String jsonStr = "{\"id\":1,\"name\":\"eknown\"}";
- // JSON 字符串转 JSON 对象
- JSONObject obj = JSONObject.parseObject(jsonStr);
- // 操作 JSON 对象
- System.out.println(obj.get("id"));
- obj.put("roleList", "[1,2,3]");
- // JSON 对象转 JSON 字符串
- System.out.println(obj.toString());
- // JSON 对象转 Java 对象
- User user = obj.toJavaObject(User.class);
- System.out.println(user);
- }
- }
- class User {
- private Integer id;
- private String name;
- private Object roleList;
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", roleList=" + roleList +
- '}';
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Object getRoleList() {
- return roleList;
- }
- public void setRoleList(Object roleList) {
- this.roleList = roleList;
- }
- }
来源: https://www.cnblogs.com/eknown/p/12056837.html