Java如何获取JSONObject内指定字段key的value值

 更新时间:2023年12月07日 10:38:36   作者:爱若执炬迎风  
这篇文章主要介绍了Java如何获取JSONObject内指定字段key的value值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java获取JSONObject内指定字段key的value值

项目场景一

获取:id

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

解决方案:

通过JSONObject解决

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

项目场景二

获取:code

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

解决方案:

通过JSONObject解决

JSONObject.getString("code");

根据json的key获取到对应的value

项目中偶尔会用到解析json,然后获取某个key的值的问题,这个有两个办法,一个是通过json创建一个对象出来,然后通过json转对象,然后通过对象获取对应的value,第二个是通过JsonObject获取对应key的value,但是只能从顶级一层一层的获取你想要的值。

如果json简单,两种方法都可以。如果json复杂一点,两种方法都挺麻烦的,所以就打算自己写一个工具类,通过传进去一个key就能直接获取到value了。

但是有个问题就是如果key有多个重复的话就只能获取到第一个key了,不过这个问题也可以解决,先获取重复key外层的key对应的value,然后获取到的json再多次获取就可以了。

talk is cheap,show you my code.

json解析用的是fastjson

public class JsonUtil {

    /**
     *  json字符串 转对象
     * @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 转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();
    }

    /**
     *  对象转json字符串
     * @param object
     * @return
     */
    public static String toJsonString(Object object){
        if (object != null) {
            return JSON.toJSONString(object);
        }
        return null;
    }

    /**
     *  根据json 中的可以 获取对应value,只会获取第一个被匹配到的值
     * @param json json 字符串
     * @param key
     * @return 返回结果类型可能是 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.");
    }


    /**
     *  根据json 中的可以 获取对应value,只会获取第一个被匹配到的值
     * @param jsonObject
     * @param key
     * @return 返回结果类型可能是 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;
    }
}

测试

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");

结果:

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

通过fastjson源码可以看到,json解析用的是map,所以获取的时候也是根据map的特性来获取的。

可以看到能够获取到对应key的value,但是前面也说了,重复的key的话只能获取到第一个value。

如果用对象的或者一层一层获取的话不会存在这个问题。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringCloud迈向云原生的步骤

    SpringCloud迈向云原生的步骤

    这篇文章主要介绍了SpringCloud怎么迈向云原生,通过本文我们来梳理一下Spring Cloud的前世今生,以及未来云原生发展的趋势,可以给这些RPC框架的演进带来一些启发,感兴趣的朋友跟随小编一起看看吧
    2022-10-10
  • java的正则表达式你知道多少

    java的正则表达式你知道多少

    这篇文章主要为大家详细介绍了java的正则表达式,使用表格进行介绍,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • java-collection中的null,isEmpty用法

    java-collection中的null,isEmpty用法

    这篇文章主要介绍了java-collection中的null,isEmpty用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 详解JNA中的回调方法

    详解JNA中的回调方法

    这篇文章主要介绍了JNA中的回调方法,主要包括JNA 中的 Callback,callback 的应用,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Javaweb使用getPart接收表单文件过程解析

    Javaweb使用getPart接收表单文件过程解析

    这篇文章主要介绍了Javaweb使用getPart接收表单文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java实现驼峰下划线互转的使用示例

    Java实现驼峰下划线互转的使用示例

    驼峰和下划线互转场景是在不同命名规范的情况下,需要进行字段名称的转换,本文就来介绍一下Java实现驼峰下划线互转的使用示例,感兴趣的可以了解一下
    2023-12-12
  • idea无法识别注解,或pom文件异常的问题及解决

    idea无法识别注解,或pom文件异常的问题及解决

    文章介绍了三种解决IDEA无法识别注解或POM文件异常的方法:1.检查省电模式设置;2.为未识别的POM文件添加Maven工程;3.移除并重新添加有问题的模块
    2026-01-01
  • Java通过jedis连接redis的几种常用方法

    Java通过jedis连接redis的几种常用方法

    jedis封装了redis原有的操作命令,使用起来很简单,本文主要介绍了Java通过jedis连接redis的几种常用方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • java怎么创建目录(删除/修改/复制目录及文件)代码实例

    java怎么创建目录(删除/修改/复制目录及文件)代码实例

    这篇文章主要介绍了java怎么创建目录,还包括删除/修改/复制目录及文件,代码简单,下面直接看代码吧
    2013-12-12
  • java面向对象基础_final详细介绍

    java面向对象基础_final详细介绍

    本文将详细介绍java final 对象的使用,需要了解更多的朋友可以参考下
    2012-11-11

最新评论