【Java / Hutool / JSON】多层嵌套的JSON数据,如何优雅地put和get? | 您所在的位置:网站首页 › Json对象嵌套对象如何转为java类 › 【Java / Hutool / JSON】多层嵌套的JSON数据,如何优雅地put和get? |
1.示例JSON数据
给你一个形如下面的多层嵌套的JSON数据,你现在准备怎么put和get值其中的【content】字段的值呢? { "messages": [{ "role": "user", "content": "生成快速排序算法" }], "model": "ziya-coding-34b", "max_tokens": 8192, "stream": true } 2.用Hutool之前以前我可能会如下操作,有的朋友看了可能会笑,但我真的这么干过: public static void main(String[] args) { String jsonStr = "{\n" + " \"messages\": [{\n" + " \"role\": \"user\",\n" + " \"content\": \"生成快速排序算法\"\n" + " }],\n" + " \"model\": \"ziya-coding-34b\",\n" + " \"max_tokens\": 8192,\n" + " \"stream\": true\n" + "}"; Map jsonMap = JSONUtil.toBean(jsonStr, Map.class); List list = (List)jsonMap.get("messages"); Map o = (Map)list.get(0); String content = o.get("content").toString(); System.out.println("content的值为:".concat(content)); }如果你还在这么干,别怕,Hutool会出手。在项目中引入依赖: cn.hutool hutool-all 5.8.23 3.用Hutool之后使用JsonObject对象的getByPath和setByPath方法,参数传入一个表达式。 表达式解释:"messages.0.content" messages:Map的key,该key对应的值是一个列表,获得的内容如下: [{ "role": "user", "content": "生成快速排序算法" }], 0:索引值,获取上一级列表对象的索引为0的元素,获得的内容如下: { "role": "user", "content": "生成快速排序算法" } content:Map的key,获得目标key对应的值【生成快速排序算法】现在获取content的值只需要一行代码: ①获取值: String jsonStr = "{\n" + " \"messages\": [{\n" + " \"role\": \"user\",\n" + " \"content\": \"生成快速排序算法\"\n" + " }],\n" + " \"model\": \"ziya-coding-34b\",\n" + " \"max_tokens\": 8192,\n" + " \"stream\": true\n" + "}"; JSONObject jsonObject = JSONUtil.parseObj(jsonStr); String content = jsonObject.getByPath("messages.0.content").toString(); ②设置值: String jsonStr = "{\n" + " \"messages\": [{\n" + " \"role\": \"user\",\n" + " \"content\": \"生成快速排序算法\"\n" + " }],\n" + " \"model\": \"ziya-coding-34b\",\n" + " \"max_tokens\": 8192,\n" + " \"stream\": true\n" + "}"; JSONObject jsonObject = JSONUtil.parseObj(jsonStr); jsonObject.putByPath("messages.0.content","新值"); |
CopyRight 2018-2019 实验室设备网 版权所有 |