如何获取json某一级节点的数据
如何获取json某一级节点的数据
最近做项目有获取和设置固定格式某一级节点值的需求。但是要一级一级地取对于多级的结构来说代码过于冗余且重复,于是写了个递归的方法根据json路径完成值的定点操作。废话不多说直接贴代码。
/**
* 通用的 通过json路径找到json值
* @param jsonObject 要取值的json对象
* @param path 对象路径
* @return 对象值列表 由于可能存在A.B.C路径中B为列表的情况,所以结果可能有多个
*/
public static List<Object> getJsonFieldValue(JSONObject jsonObject, String path) {
List<String> keyWordList = new ArrayList(Arrays.asList(path.split("\\.")));
List<Object> list = new ArrayList<>();
String key = keyWordList.get(0);
Object object = jsonObject.get(key);
keyWordList.remove(0);
if (keyWordList.isEmpty()) {
if (null != object) {
list.add(object);
}
return list;
}
String subPath = StringUtils.join(keyWordList, ".");
if (object instanceof JSONArray) {
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(object));
if (jsonArray.isEmpty()) {
return new ArrayList<>();
}
jsonArray.forEach(e -> list.addAll(getJsonFieldValue(JSON.parseObject(JSON.toJSONString(e)), subPath)));
}else if(object instanceof JSONObject){
JSONObject subJsonObject = JSONObject.parseObject(JSON.toJSONString(object));
list.addAll(getJsonFieldValue(JSON.parseObject(JSON.toJSONString(subJsonObject)), subPath));
}
return list;
}
/**
* 通用的 通过json路径找到json值
* @param jsonObject 要取值的json对象
* @param path 对象路径
* @param value 要设置的值
* @return 修改后的对象
*/
public static Object setJsonFieldValue(JSONObject jsonObject, String path, Object value) {
List<String> keyWordList = new ArrayList(Arrays.asList(path.split("\\.")));
String key = keyWordList.get(0);
keyWordList.remove(0);
//如果关键词为空,说明此处为目标点,设置值
if (keyWordList.isEmpty()) {
jsonObject.fluentPut(key,value);
return jsonObject;
}
//关键词不为空,取出子jsonObject进行递归
Object object = jsonObject.get(key);
String subPath = StringUtils.join(keyWordList, ".");
if (object instanceof JSONArray) {
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(object));
if (jsonArray.isEmpty()) {
//说明不是目标点,原样返回
return object;
}
JSONArray newArray = new JSONArray();
jsonArray.forEach(e -> newArray.add(setJsonFieldValue(JSON.parseObject(JSON.toJSONString(e)), subPath,value)));
jsonObject.fluentPut(key,newArray);
}else if(object instanceof JSONObject){
JSONObject subJsonObject = JSONObject.parseObject(JSON.toJSONString(object));
jsonObject.fluentPut(key,setJsonFieldValue(JSON.parseObject(JSON.toJSONString(subJsonObject)), subPath,value));
}
return jsonObject;
}
如何获取json某一级节点的数据的更多相关文章
- 获取Json数据某节点的值
时间匆忙,直接上代码,回家还得做清蒸鱼呢! #region 获取Json字符串某节点的值 /// <summary> /// 获取Json字符串某节点的值 /// </summary ...
- zTree实现获取一级节点数据
zTree实现获取一级节点数据 1.实现源码 <!DOCTYPE html> <html> <head> <title>zTree实现基本树</t ...
- .Net Core中获取appsettings.json中的节点数据
获取ConnectionStrings节点数据 //appsettings.json { "ConnectionStrings": { //DEV "DbConn&quo ...
- Netflix Falcor获取JSON数据
Netflix开源了JavaScript库Falcor,它为从多个来源获取JSON数据提供了模型和异步机制. Netflix利用Falcor库实现通过JSON数据填充他们网页应用的用户界面.所有来自内 ...
- 循环(数组循环、获取json数据循环)、each()循环详解
return; // 退出循环(不满足,退出此次循环.下次满足条件,依然会走此循环)return false; //退出函数(退出所有) 一. 数组循环: html: <div class=&q ...
- ajax获取json数据 for select2
json数据“a.json” [ { "id": "1", "text": "张三" }, { "id&quo ...
- 获取json数据
通过异步获取json来展示数据表格,性能提高不少.实例如下: 前台: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999 ...
- qt qml ajax 获取 json 天气数据示例
依赖ajax.js类库,以下代码很简单的实现了获取天气json数据并展示的任务 [TestAjax.qml] import QtQuick 2.0 import "ajax.js" ...
- angularJS获取json数据(实战)
学习了这么多天的AngularJS,今天想从实战的角度和大家分享一个简单的Demo--用户查询系统,以巩固之前所学知识.功能需求需要满足两点 1.查询所有用户信息,并在前端展示 2.根据id查询用户信 ...
随机推荐
- Java 多线程基础(十一)线程优先级和守护线程
Java 多线程基础(十一)线程优先级和守护线程 一.线程优先级 Java 提供了一个线程调度器来监控程序启动后进去就绪状态的所有线程.线程调度器通过线程的优先级来决定调度哪些线程执行.一般来说,Ja ...
- Python 简明教程 --- 9,Python 编码
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 当你选择了一种语言,意味着你还选择了一组技术.一个社区. -- Joshua Bloch 目录 1, ...
- Sql sever 声明变量,赋值变量
语句: --声明变量DECLARE @idcard nvarchar () , @rowid nvarchar () --给变量赋值SELECT @idcard = '{0}', @rowid = ' ...
- Yolo训练自定义目标检测
Yolo训练自定义目标检测 参考darknet:https://pjreddie.com/darknet/yolo/ 1. 下载darknet 在 https://github.com/pjreddi ...
- Django项目中集成第三方登录时出现的错误
原以为是被反爬 没想到 总结:这里的http应该是https协议,以后要更加小心 了,不能犯这种低级错误
- (私人收藏)2019WER积木教育机器人赛(普及赛)解决方案-(全套)获取能源核心
2019WER积木教育机器人赛(普及赛)解决方案-(全套)获取能源核心 含地图,解决程序,详细规则,搭建方案EV3;乐高;机器人比赛;能力风暴;WER https://pan.baidu.com/s/ ...
- Java源码详解系列(十)--全面分析mybatis的使用、源码和代码生成器(总计5篇博客)
简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...
- 列拖拽顺序调整-sortable.js使用
最近在做一个单表统计功能,涉及到一个查询列配置,但是查询出来的列顺序,可以进行配置,通过写列的排序当然阔以,但是方法就不美丽了.所以,在网上搜了一下拖拽的组件,最终定位Sortable.js,简单易用 ...
- P2034 选择数字——线性dp(单调队列优化)
选择数字 题目描述 给定一行 \(n\) 个非负整数 \(a[1]...a[n]\) .现在你可以选择其中若干个数,但不能有超过 \(k\) 个连续的数字被选择.你的任务是使得选出的数字的和最大. 输 ...
- 【Flutter 实战】动画核心
老孟导读:动画系统是任何一个UI框架的核心功能,也是开发者学习一个UI框架的重中之重,同时也是比较难掌握的一部分,下面我们就一层一层的揭开 Flutter 动画的面纱. 任何程序的动画原理都是一样的, ...