国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

解析JSON的這六種方法,真香!

開發(fā) 前端
架構(gòu)在 Java 開發(fā)中,解析 JSON 是一個(gè)非常常見的需求。不管是和前端交互、調(diào)用第三方接口,還是處理配置文件,幾乎都繞不開 JSON。這篇文章總結(jié)了6種主流的 JSON 解析方法,希望對你會有所幫助。

前言

在 Java 開發(fā)中,解析 JSON 是一個(gè)非常常見的需求。

不管是和前端交互、調(diào)用第三方接口,還是處理配置文件,幾乎都繞不開 JSON。

這篇文章總結(jié)了6種主流的 JSON 解析方法,希望對你會有所幫助。

1. 使用 Jackson:業(yè)界標(biāo)配

功能特點(diǎn)

  • 強(qiáng)大的序列化和反序列化:支持將 JSON 字符串轉(zhuǎn)為 Java 對象,也支持將 Java 對象轉(zhuǎn)換為 JSON。
  • 支持復(fù)雜結(jié)構(gòu):處理嵌套對象、數(shù)組、泛型等場景非常輕松。
  • 支持注解:如 @JsonIgnore、@JsonProperty 等,能精細(xì)控制序列化與反序列化的行為。
  • 性能高:Jackson 的性能非常出色,是很多企業(yè)級項(xiàng)目的首選。

代碼示例

  • JSON 轉(zhuǎn)對象(反序列化)
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"張三\"}";

        ObjectMapper objectMapper = new ObjectMapper();
        User user = objectMapper.readValue(json, User.class);
        System.out.println(user.getName()); // 輸出:張三
    }
}

class User {
    private int id;
    private String name;

    // Getters 和 Setters 省略
}
  • 對象轉(zhuǎn) JSON(序列化)
User user = new User();
user.setId(1);
user.setName("李四");

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json); // 輸出:{"id":1,"name":"李四"}

高級功能

  • 日期格式化:@JsonFormat(pattern = "yyyy-MM-dd")
  • 忽略字段:@JsonIgnore
  • 重命名字段:@JsonProperty("custom_name")

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

功能全面,支持復(fù)雜場景

配置較多,學(xué)習(xí)成本稍高

性能高,社區(qū)活躍,企業(yè)級項(xiàng)目首選

過于強(qiáng)大,部分功能用不上

豐富的注解支持,便于控制序列化行為

庫體積較大,對于小型項(xiàng)目略顯笨重

2. 使用 Gson:輕量好用

功能特點(diǎn)

  • 輕量級:Gson 的設(shè)計(jì)非常簡潔,代碼量少,適合中小型項(xiàng)目。
  • 支持泛型:可以輕松解析帶泛型的 JSON。
  • 注解控制:支持通過注解控制序列化行為,如 @Expose。
  • 易擴(kuò)展:通過自定義序列化器和反序列化器,可以處理復(fù)雜的場景。

代碼示例

  • JSON 轉(zhuǎn)對象
import com.google.gson.Gson;

public class GsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":1,\"name\":\"王五\"}";

        Gson gson = new Gson();
        User user = gson.fromJson(json, User.class);
        System.out.println(user.getName()); // 輸出:王五
    }
}
  • 對象轉(zhuǎn) JSON
User user = new User();
user.setId(2);
user.setName("趙六");

Gson gson = new Gson();
String json = gson.toJson(user);
System.out.println(json); // 輸出:{"id":2,"name":"趙六"}

高級功能

  • 忽略字段:@Expose
@Expose
private String name;
  • 自定義序列化器/反序列化器:
Gson gson = new GsonBuilder()
        .registerTypeAdapter(CustomClass.class, new CustomSerializer())
        .create();

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

輕量級,簡單易用,適合中小型項(xiàng)目

性能稍遜于 Jackson

學(xué)習(xí)曲線平滑,新手容易上手

功能不如 Jackson 豐富

提供良好的擴(kuò)展能力

復(fù)雜對象處理起來較為麻煩

3. 使用 FastJSON:高性能

功能特點(diǎn)

  • 性能優(yōu)異:FastJSON 的解析速度非常快,適合大數(shù)據(jù)量場景。
  • 支持動態(tài)字段:可以輕松處理動態(tài) JSON 數(shù)據(jù)。
  • 強(qiáng)大的類型支持:支持嵌套對象、泛型、數(shù)組等復(fù)雜結(jié)構(gòu)。
  • 注解控制:類似 Jackson 和 Gson,支持注解控制字段的序列化和反序列化。

代碼示例

  • JSON 轉(zhuǎn)對象
import com.alibaba.fastjson.JSON;

public class FastJsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":1,\"name\":\"小明\"}";

        User user = JSON.parseObject(json, User.class);
        System.out.println(user.getName()); // 輸出:小明
    }
}
  • 對象轉(zhuǎn) JSON
User user = new User();
user.setId(3);
user.setName("小紅");

String json = JSON.toJSONString(user);
System.out.println(json); // 輸出:{"id":3,"name":"小紅"}

高級功能

  • 自動駝峰轉(zhuǎn)下劃線:
JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
  • 動態(tài)字段解析:
Map<String, Object> map = JSON.parseObject(json, Map.class);

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

性能極高,解析速度快

曾有歷史安全漏洞的爭議

支持復(fù)雜的動態(tài)字段解析

社區(qū)活躍度稍遜于 Jackson 和 Gson

功能全面,適合大規(guī)模數(shù)據(jù)處理場景

配置選項(xiàng)和 API 比較多,稍顯復(fù)雜

4. 使用 JsonPath:快速提取嵌套字段

功能特點(diǎn)

  • 高效字段提取:通過路徑表達(dá)式(類似 XPath)快速提取嵌套字段。
  • 靈活性強(qiáng):支持動態(tài)字段和條件過濾。
  • 輕量級:專注于字段提取,功能簡單明確。

代碼示例

import com.jayway.jsonpath.JsonPath;

public class JsonPathExample {
    public static void main(String[] args) {
        String json = """
            {
                "store": {
                    "book": [
                        {"title": "書1", "price": 10},
                        {"title": "書2", "price": 20}
                    ]
                }
            }
        """;

        // 提取第一個(gè)書籍的標(biāo)題
        String title = JsonPath.read(json, "$.store.book[0].title");
        System.out.println(title); // 輸出:書1

        // 提取所有書籍價(jià)格
        List<Integer> prices = JsonPath.read(json, "$.store.book[*].price");
        System.out.println(prices); // 輸出:[10, 20]
    }
}

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

字段提取簡潔高效

不支持序列化和反序列化

動態(tài)字段處理能力強(qiáng)

依賴 JsonPath 語法

適合快速提取嵌套字段

不適合全量 JSON 轉(zhuǎn)換

5. 使用 org.json:輕量工具類

功能特點(diǎn)

  • 輕量級:核心是一個(gè)工具類,適合簡單場景。
  • 構(gòu)造和解析簡單:適合快速創(chuàng)建 JSON 或提取字段。
  • 靈活性一般:不支持復(fù)雜對象映射。

代碼示例

import org.json.JSONObject;

public class OrgJsonExample {
    public static void main(String[] args) {
        String json = "{\"id\":1,\"name\":\"張三\"}";

        // 提取字段
        JSONObject jsonObject = new JSONObject(json);
        System.out.println(jsonObject.getString("name")); // 輸出:張三

        // 構(gòu)造 JSON
        JSONObject newJson = new JSONObject();
        newJson.put("id", 2);
        newJson.put("name", "李四");
        System.out.println(newJson.toString()); // 輸出:{"id":2,"name":"李四"}
    }
}

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

輕量級,適合簡單場景

不支持復(fù)雜嵌套對象

使用簡單,學(xué)習(xí)成本低

功能簡單,擴(kuò)展性差

6. 手動解析 JSON:靈活度最高

功能特點(diǎn)

  • 完全自由:不依賴第三方庫,自己解析 JSON。
  • 動態(tài)處理:適合不規(guī)則字段結(jié)構(gòu)的 JSON。
  • 代碼復(fù)雜度高:適合特殊場景。

代碼示例

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Map;

public class ManualParsing {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"動態(tài)字段\"}";

        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Object> map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});
        System.out.println(map.get("name")); // 輸出:動態(tài)字段
    }
}

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

靈活性高,適合動態(tài)字段

代碼復(fù)雜度高,不易維護(hù)

不依賴第三方庫

性能和效率低于專業(yè) JSON 庫

總結(jié)

最后給大家對比一下文章中提到的6種方法各自的優(yōu)缺點(diǎn):

方法

適用場景

優(yōu)點(diǎn)

缺點(diǎn)

Jackson

企業(yè)級項(xiàng)目,復(fù)雜序列化和反序列化場景

功能強(qiáng)大,性能優(yōu)異,支持復(fù)雜結(jié)構(gòu)

配置復(fù)雜,學(xué)習(xí)曲線高

Gson

中小型項(xiàng)目,簡單的 JSON 轉(zhuǎn)換場景

輕量級,簡單易用

功能有限,性能略遜

FastJSON

高性能需求,大數(shù)據(jù)量的動態(tài)解析

性能極高,功能豐富

曾有安全漏洞爭議,社區(qū)支持稍遜 Jackson

JsonPath

嵌套結(jié)構(gòu)復(fù)雜、動態(tài)字段提取場景

字段提取語法簡單,靈活性強(qiáng)

不支持序列化和反序列化

org.json

快速解析或構(gòu)造 JSON 場景

輕量級,適合簡單場景

功能單一,擴(kuò)展性差

手動解析

動態(tài) JSON 或字段不固定的場景

自由度高,靈活性強(qiáng)

代碼復(fù)雜,效率低于專業(yè)工具

工具千千萬,場景最重要!

選對了工具,才能省時(shí)省力,少踩坑多摸魚。

責(zé)任編輯:武曉燕 來源: 蘇三說技術(shù)
相關(guān)推薦

2011-02-24 10:56:34

人才

2025-05-19 00:02:00

數(shù)據(jù)脫敏加密算法數(shù)據(jù)庫

2010-10-08 11:13:22

MySQL修改密碼

2023-09-06 08:00:00

ChatGPT數(shù)據(jù)分析

2021-12-06 06:58:50

List重復(fù)數(shù)據(jù)

2025-01-03 08:48:20

列表推導(dǎo)式Python編程

2025-07-14 03:00:00

2022-06-09 08:46:58

ITCIO職業(yè)

2022-06-10 10:25:07

CIOIT領(lǐng)導(dǎo)者職業(yè)生涯

2015-07-09 10:13:05

IT基礎(chǔ)設(shè)施支出數(shù)據(jù)中心

2023-04-03 20:29:00

Linux環(huán)境變量

2023-04-26 08:41:16

Git撤消更改

2023-05-15 18:32:20

2022-05-30 16:42:20

數(shù)據(jù)中心

2022-02-21 22:47:36

首席信息官IT技術(shù)

2022-11-08 11:00:33

2022-11-29 10:33:15

Kubectl命令pod

2023-11-07 11:11:42

Go性能

2024-11-05 08:28:50

2023-12-08 08:53:37

數(shù)據(jù)中心人工智能自動化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

是的av在线| 久久神马影院| 99精品在线免费| 成人动漫视频在线观看免费| 女人黄色免费在线观看| 亚洲欧美自拍偷拍| 黄色一级片国产| 伊人影院久久| 欧美在线亚洲在线| 超碰一区二区| 欧美丝袜自拍制服另类| 国产xxxxx在线观看| 香蕉成人久久| 91精品久久久久久久久中文字幕| 香蕉久久久久久| 亚洲国产成人爱av在线播放| 日本高清中文字幕二区在线| 中文字幕在线不卡视频| 黄色一级片国产| 日韩精品午夜视频| 国产高清精品一区二区| 欧美黑人做爰爽爽爽| 中文字幕久久久| 91在线三级| 91精品国产高清一区二区三区| 在线观看av网站永久| 国产精品污网站| 欧美爱爱视频免费看| 久久精品二区亚洲w码| 久久精品日韩| 欧美一区在线看| 国产第一区电影| 日本午夜精品| 久久久亚洲国产天美传媒修理工| 日本精品裸体写真集在线观看| 亚洲国产另类 国产精品国产免费| 日韩在线观看www| 欧美三级电影一区| 免费一级毛片在线观看| 亚洲亚洲人成综合网络| 东北一级毛片| 亚洲欧美另类小说视频| 中文字幕国产免费| 国产精品丝袜一区| 天天色综合社区| 国产精品色哟哟| 日本激情视频在线播放| 国产欧美一区二区精品婷婷| 久久久久国产精品熟女影院| 久久午夜电影网| 国产成人久久婷婷精品流白浆| 99国产精品久久久| 国产91在线免费| 久久久久久久久久久99999| 一本大道熟女人妻中文字幕在线 | 国产精品一级黄| 色呦呦网站入口| 国产黄色精品视频| 日韩欧美视频网站| 国产精品进线69影院| 偷偷要色偷偷| 亚洲欧美自拍另类日韩| 国产婷婷精品| 精品国产视频在线 | 美女主播视频一区| 国产欧美88| 亚洲国产综合91精品麻豆| 强开小嫩苞一区二区三区网站| 高清久久精品| 啊v视频在线| 在线播放91灌醉迷j高跟美女| 黄a在线观看| 一区二区中文字幕| av日韩在线播放| 91精品免费久久久久久久久| 小嫩嫩精品导航| 亚洲一区二区高清视频| 99re这里都是精品| 91破解版在线看| 欧美久久久影院| 国产精品天堂蜜av在线播放| 国产精品盗摄久久久| 久久三级福利| 久久这里只精品| 欧美另类videos死尸| 欧美高清你懂的| 国产精品福利观看| 日韩精品电影在线| 亚洲欧美国产日韩综合| 在线观看日韩av先锋影音电影院| 欧美gay视频| 国产精品va在线播放| 免费成人美女在线观看.| www亚洲成人| 91精品国产综合久久精品麻豆| 国产91在线播放精品| 亚洲一区久久久| 99久久精品国产一区二区三区| 色资源在线观看| 久久精品99久久香蕉国产色戒| 午夜天堂精品久久久久| www插插插无码免费视频网站| 亚洲黄色免费网站| av日韩亚洲| 成人xxxxx色| 中文字幕 久热精品 视频在线| 日本免费在线视频| 国产成人涩涩涩视频在线观看| 极品少妇xxxx精品少妇偷拍 | 999久久久91| 一卡二卡三卡视频| 欧美日韩专区在线| 国产无遮挡裸体免费久久| 日韩av一区二区三区在线 | 久久精品免费在线观看| 国产网友自拍视频导航网站在线观看| 久久99久久99精品免观看粉嫩| 午夜在线视频一区二区区别| 午夜爽爽爽男女免费观看影院| 亚洲国产精品va在线看黑人 | 鬼打鬼之黄金道士1992林正英| 99re这里只有精品视频首页| 蜜桃视频在线观看www社区| 久久天堂av| 午夜精品一区二区三区在线观看| 久久久久久久精| 欧美理论在线观看| 国产亚洲福利社区一区| 成人精品3d动漫| 欧美精品丝袜中出| 在线日韩一区| 日韩经典中文字幕一区| 奇米影视四色在线| 亚洲日韩中文字幕在线播放| 欧美成人tv| 免费看的国产视频网站| 丝袜美腿精品国产二区| 日韩国产欧美三级| av在线天堂| 92看片淫黄大片看国产片| 中文字幕va一区二区三区| 韩日一区二区| 妞干网这里只有精品| 777久久久精品| 欧美黄色免费| 天堂av在线免费观看| 国产精品pans私拍| 亚洲视频一二区| 国产精品欧美大片| 日韩毛片在线免费看| 日韩中文字幕在线精品| 国产成人一区在线| 亚洲最大成人| 欧美一区二区三区播放老司机| 91色在线porny| 欧美日韩国产综合网| 亚洲大胆视频| 久草中文综合在线| 成人成人成人在线视频| 国产欧美精品一区二区三区四区| 久久色在线观看| 国产精品久久久久久一区二区三区| 亚洲三级久久久| 日韩一区二区三区av| 亚洲综合成人在线视频| 激情小说亚洲一区| 欧美肥老太太性生活| 久久精品蜜桃| 免费播放片a高清在线观看| 国自产拍偷拍精品啪啪一区二区| 热久久视久久精品18亚洲精品| 久久久国际精品| 中文亚洲免费| 国产美女精品视频免费播放软件| 久久午夜夜伦鲁鲁一区二区| 久久综合亚洲社区| 欧洲视频一区二区| 欧美日韩国产中字| 日韩电影在线看| 国产美女高潮在线| 午夜视频在线免费| 亚洲视频在线观看日本a| 中文在线不卡视频| 国产精品中文| 久久精品99国产| 午夜精品在线视频| 亚洲成av人影院| 好看的亚洲午夜视频在线| 夜级特黄日本大片_在线| 亚洲成人av动漫| 一区二区国产精品视频| 久久综合九色综合97婷婷女人 | 国产不卡在线一区| 国产美女精品视频免费播放软件| 91看片在线免费观看| 日韩免费av片在线观看| 欧美午夜片在线观看| 国产福利一区二区三区| 精品久久97| yellow91字幕网在线|