最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何獲取JSONObject內(nèi)指定字段key的value值

 更新時(shí)間:2023年12月07日 10:38:36   作者:愛若執(zhí)炬迎風(fēng)  
這篇文章主要介紹了Java如何獲取JSONObject內(nèi)指定字段key的value值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java獲取JSONObject內(nèi)指定字段key的value值

項(xiàng)目場(chǎng)景一

獲?。篿d

{
    "code": "success",
    "data": {
        "user": {
            "id": "6286f2c0-6399-11ec-800b-f7f07b836bd8",
        },
        "exp": 1667880458
    }
}

解決方案:

通過JSONObject解決

String id = object.getJSONObject("user").getString("id");

項(xiàng)目場(chǎng)景二

獲?。篶ode

{"http_code":200,"code":"0","message":"SUCCESS"}

解決方案:

通過JSONObject解決

JSONObject.getString("code");

根據(jù)json的key獲取到對(duì)應(yīng)的value

項(xiàng)目中偶爾會(huì)用到解析json,然后獲取某個(gè)key的值的問題,這個(gè)有兩個(gè)辦法,一個(gè)是通過json創(chuàng)建一個(gè)對(duì)象出來,然后通過json轉(zhuǎn)對(duì)象,然后通過對(duì)象獲取對(duì)應(yīng)的value,第二個(gè)是通過JsonObject獲取對(duì)應(yīng)key的value,但是只能從頂級(jí)一層一層的獲取你想要的值。

如果json簡單,兩種方法都可以。如果json復(fù)雜一點(diǎn),兩種方法都挺麻煩的,所以就打算自己寫一個(gè)工具類,通過傳進(jìn)去一個(gè)key就能直接獲取到value了。

但是有個(gè)問題就是如果key有多個(gè)重復(fù)的話就只能獲取到第一個(gè)key了,不過這個(gè)問題也可以解決,先獲取重復(fù)key外層的key對(duì)應(yīng)的value,然后獲取到的json再多次獲取就可以了。

talk is cheap,show you my code.

json解析用的是fastjson

public class JsonUtil {

    /**
     *  json字符串 轉(zhuǎn)對(duì)象
     * @param jsonString
     * @param <T>
     * @return
     */
    public static <T> T toObject(String jsonString , Class<T> clz){
        if (StringUtils.isNotEmpty(jsonString)) {
            return JSON.parseObject(jsonString , clz);
        }
        return null;
    }

    /**
     *  jsonString 轉(zhuǎn)list
     * @param jsonString
     * @param clz
     * @param <T>
     * @return
     */
    public static <T> List<T> toList(String jsonString , Class<T> clz){
        if (StringUtils.isNotEmpty(jsonString)) {
            return JSON.parseArray(jsonString, clz);
        }
        return Collections.emptyList();
    }

    /**
     *  對(duì)象轉(zhuǎn)json字符串
     * @param object
     * @return
     */
    public static String toJsonString(Object object){
        if (object != null) {
            return JSON.toJSONString(object);
        }
        return null;
    }

    /**
     *  根據(jù)json 中的可以 獲取對(duì)應(yīng)value,只會(huì)獲取第一個(gè)被匹配到的值
     * @param json json 字符串
     * @param key
     * @return 返回結(jié)果類型可能是 JSONObject、String、JSONArray
     */
    public static Object getJsonValue(String json , String key){
        if (StringUtils.isNotEmpty(json) && StringUtils.isNotEmpty(key)) {
            Object object = JSON.parse(json);
            if (object != null) {
                if (object instanceof JSONObject) {
                    return getJsonValue((JSONObject) object, key);
                }else if (object instanceof  JSONArray){
                    return getJsonValue((JSONArray) object, key);
                }
            }
            return object;
        }
        throw new IllegalArgumentException("param json or key cannot be empty.");
    }


    /**
     *  根據(jù)json 中的可以 獲取對(duì)應(yīng)value,只會(huì)獲取第一個(gè)被匹配到的值
     * @param jsonObject
     * @param key
     * @return 返回結(jié)果類型可能是 JSONObject、String、JSONArray
     */
    public static Object getJsonValue(JSONObject jsonObject , String key) {
        if (jsonObject != null && StringUtils.isNotEmpty(key)) {
            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
                String entryKey = entry.getKey();
                Object value = entry.getValue();
                if (key.equals(entryKey)) {
                    return value;
                } else {
                    if (value != null) {
                        String s = value.toString();
                        if (StringUtils.isNotEmpty(s)) {
                            Object jsonValue = getJsonValue(value, key);
                            if (jsonValue != null) {
                                return jsonValue;
                            }
                        }
                    }
                }
            }
            return null;
        }
        throw new IllegalArgumentException("param jsonObject or key cannot by empty.");
    }

    public static Object getJsonValue(Object object , String key){
        if (object != null && StringUtils.isNotEmpty(key)) {
            if (object instanceof JSONObject) {
                return getJsonValue((JSONObject) object, key);
            }else if (object instanceof JSONArray){
                return getJsonValue((JSONArray) object, key);
            }
        }
        return null;
    }

    public static Object getJsonValue(JSONArray jsonArray , String key) {
        if (jsonArray != null && StringUtils.isNotEmpty(key)) {
            for (Object next : jsonArray) {
                if (next != null) {
                    return getJsonValue(next, key);
                }
            }
        }
        return null;
    }
}

測(cè)試

json 如下:

{
   "results" : [
      {
         "access_points" : [],
         "address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Parkway",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara County",
               "short_name" : "Santa Clara County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "美國",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043美國",
         "geometry" : {
            "location" : {
               "lat" : 37.4223097,
               "lng" : -122.0846245
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4236586802915,
                  "lng" : -122.0832755197085
               },
               "southwest" : {
                  "lat" : 37.4209607197085,
                  "lng" : -122.0859734802915
               }
            }
         },
         "place_id" : "ChIJtYuu0V25j4ARwu5e4wwRYgE",
         "plus_code" : {
            "compound_code" : "CWC8+W5 美國 California, 山景城",
            "global_code" : "849VCWC8+W5"
         },
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

Object content = JsonUtil.getJsonValue(json, "northeast");

結(jié)果:

{"lng":-122.0832755197085,"lat":37.4236586802915}

通過fastjson源碼可以看到,json解析用的是map,所以獲取的時(shí)候也是根據(jù)map的特性來獲取的。

可以看到能夠獲取到對(duì)應(yīng)key的value,但是前面也說了,重復(fù)的key的話只能獲取到第一個(gè)value。

如果用對(duì)象的或者一層一層獲取的話不會(huì)存在這個(gè)問題。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud邁向云原生的步驟

    SpringCloud邁向云原生的步驟

    這篇文章主要介紹了SpringCloud怎么邁向云原生,通過本文我們來梳理一下Spring?Cloud的前世今生,以及未來云原生發(fā)展的趨勢(shì),可以給這些RPC框架的演進(jìn)帶來一些啟發(fā),感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • java的正則表達(dá)式你知道多少

    java的正則表達(dá)式你知道多少

    這篇文章主要為大家詳細(xì)介紹了java的正則表達(dá)式,使用表格進(jìn)行介紹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • java-collection中的null,isEmpty用法

    java-collection中的null,isEmpty用法

    這篇文章主要介紹了java-collection中的null,isEmpty用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解JNA中的回調(diào)方法

    詳解JNA中的回調(diào)方法

    這篇文章主要介紹了JNA中的回調(diào)方法,主要包括JNA 中的 Callback,callback 的應(yīng)用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Javaweb使用getPart接收表單文件過程解析

    Javaweb使用getPart接收表單文件過程解析

    這篇文章主要介紹了Javaweb使用getPart接收表單文件過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java實(shí)現(xiàn)駝峰下劃線互轉(zhuǎn)的使用示例

    Java實(shí)現(xiàn)駝峰下劃線互轉(zhuǎn)的使用示例

    駝峰和下劃線互轉(zhuǎn)場(chǎng)景是在不同命名規(guī)范的情況下,需要進(jìn)行字段名稱的轉(zhuǎn)換,本文就來介紹一下Java實(shí)現(xiàn)駝峰下劃線互轉(zhuǎn)的使用示例,感興趣的可以了解一下
    2023-12-12
  • idea無法識(shí)別注解,或pom文件異常的問題及解決

    idea無法識(shí)別注解,或pom文件異常的問題及解決

    文章介紹了三種解決IDEA無法識(shí)別注解或POM文件異常的方法:1.檢查省電模式設(shè)置;2.為未識(shí)別的POM文件添加Maven工程;3.移除并重新添加有問題的模塊
    2026-01-01
  • Java通過jedis連接redis的幾種常用方法

    Java通過jedis連接redis的幾種常用方法

    jedis封裝了redis原有的操作命令,使用起來很簡單,本文主要介紹了Java通過jedis連接redis的幾種常用方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • java怎么創(chuàng)建目錄(刪除/修改/復(fù)制目錄及文件)代碼實(shí)例

    java怎么創(chuàng)建目錄(刪除/修改/復(fù)制目錄及文件)代碼實(shí)例

    這篇文章主要介紹了java怎么創(chuàng)建目錄,還包括刪除/修改/復(fù)制目錄及文件,代碼簡單,下面直接看代碼吧
    2013-12-12
  • java面向?qū)ο蠡A(chǔ)_final詳細(xì)介紹

    java面向?qū)ο蠡A(chǔ)_final詳細(xì)介紹

    本文將詳細(xì)介紹java final 對(duì)象的使用,需要了解更多的朋友可以參考下
    2012-11-11

最新評(píng)論

延安市| 桂平市| 二连浩特市| 酒泉市| 商洛市| 南京市| 长丰县| 怀远县| 安义县| 孙吴县| 石嘴山市| 江北区| 绍兴县| 昌图县| 句容市| 青神县| 科技| 尉犁县| 温州市| 黄骅市| 西城区| 九江市| 手机| 南涧| 大埔区| 曲周县| 龙海市| 铜山县| 嘉鱼县| 沧州市| 临泽县| 株洲县| 兴山县| 江都市| 高唐县| 常州市| 丹阳市| 乐平市| 株洲市| 九江市| 泰和县|