多重map和list的嵌套如何获取某个key的值(语言-java)

工作中遇到的问题,例如如何获取图片中resources的value,自己逐层去找可以达到效果,但感觉很low,逐层遍历的话又感觉反而加大了编写和运行成本,求解

img

正常来说这种返回的数据都是有固定的格式的,获取某个特定字段必须一层一层的找到对应位置才可以,否则你无法保证你取到的是想要的值,没有必要逐层遍历。只有当你获取的key的名称是一个动态名称时才需要遍历,但你也得知道是在哪个节点下才行,因为多个节点下可能存在相同的key

1.如果给的数据结构能变,就从数据结构上做调整,让数据简洁一些,方便取出
2.数据结构不变,除了遍历,还能想到的就是Stream了,可以试试
参考

JAVA8 Stream接口流式方法 map操作 filter操作以及flatMap操作_m0_67403073的博客-CSDN博客 关于stream流式操作,在rt.jar包里面,ReferencePipeline管道方式操作数据 下面集成所有操作方法,利用这些流,处理大数据的方式,效率提升明显,并且很多语言都支持这种操作,相当于统一了这种编程方式。我们先来看看这三个操作过滤的是什么数据,过滤之后仍然可以循环数据 list.stream().filter(smap -> null != smap.get("ip") && !"".equals(smap.get("ip"))).forEach(imp -&g https://blog.csdn.net/m0_67403073/article/details/123942898?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-123942898-null-null.pc_agg_new_rank&utm_term=java%20%E6%B5%81%E5%BC%8F%E6%93%8D%E4%BD%9Cmap&spm=1000.2123.3001.4430

https://download.csdn.net/download/muxiang0423/3180722?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-download-2~default~OPENSEARCH~Rate-4-3180722-ask-7757448.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-download-2~default~OPENSEARCH~Rate-4-3180722-ask-7757448.pc_feed_download_top3ask

这种就是全部放在JSONObject对象中,以key-value的方式存储,value可以是对象、集合

你可以用hutool工具集里的根据表达式获取json指定数据的方法。cn.hutool.json.JSONUtil#getByPath

img

依赖是

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.4.2</version>
</dependency>

转json,找关键词

如果是SpringBoot 读取K8s这种自定义的yml,可以使用@PropertySource @ConfigurationProperties注解搭配使用 读取自定义yml

你的数据存储是集合且有层级关系,自然需要遍历,而且是多次。一般配置数据都是初始化加载到内存,不存在你说的效率问题的。

jsonpath(不懂就百度一下,很简单),确定好路径,一步到位