用字符串表达式访问JSON数据(java,fastjson)
2019独角兽企业重金招聘Python工程师标准>>>
//单元科技-www.ccell.com.cn 技术部,开源
//XML数据有XPATH 如"root/rows[@id=1]/name"
//在JS中JSON数据可以对象方式访问
//java中怎么 用字符串表达式访问JSON数据? 找了很久没有找到,自己写一个,以减小代码量,让程序可读性变强
//用法:
// JSONObject json = JSON.parseObject("{a:1,b:{}}");
// JSONHelper.putByJPath(json, "b.abc", 123);
// System.out.println(json);
// System.out.println(JSONHelper.getByJPath(json, "b.abc", Integer.class));
//代码:
package com.ccell.json;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class JSONHelper {
public static <T> Object getByJPath(JSONObject root, String jpath, Class<T> cls) {
if (root == null) {
return null;
}
if (jpath == null || "".equals(jpath)) {
if (cls.equals(JSONObject.class)){
return root;
}else{
return null;
}
}
String[] names = jpath.split("\\.");
String key = names[0];
JSONObject jobj = null;
Object result = null;
if (key.matches("^.+(\\[\\d+\\])+$")) {
String[] tmps = key.replaceAll("\\]", "").split("\\[");
JSONArray jarray = root.getJSONArray(tmps[0]);
if (jarray != null) {
for (int j = 1; j < tmps.length; j++) {
int index = Integer.parseInt(tmps[j]);
if (j == tmps.length - 1) {
if (names.length == 1) {
result = jarray.getObject(index, cls);
} else {
jobj = jarray.getJSONObject(index);
result = getByJPath(jobj, jpath.substring(key.length() + 1), cls);
}
} else {
jarray = jarray.getJSONArray(index);
}
}
}
} else {
if (names.length == 1) {
result = root.getObject(key, cls);
} else {
jobj = root.getJSONObject(key);
result = getByJPath(jobj, jpath.substring(key.length() + 1), cls);
}
}
return result;
}
public static void putByJPath(JSONObject root, String jpath, Object value) {
String key = jpath;
String parentpath = "";
int pos = jpath.lastIndexOf(".");
if (pos >= 0){
key = jpath.substring(pos + 1);
parentpath = jpath.substring(0,pos );
}
JSONObject jobj = (JSONObject) getByJPath(root,parentpath,JSONObject.class);
jobj.put(key, value);
}
}
转载于:https://my.oschina.net/u/162811/blog/76501
用字符串表达式访问JSON数据(java,fastjson)相关推荐
- 使用Go语言访问JSON数据(gojsonq)
2019独角兽企业重金招聘Python工程师标准>>> 使用Go语言访问JSON数据(gojsonq) 转载于:https://my.oschina.net/coderminer/b ...
- java fastjson_java操作json数据之fastjson
第五步骤:多层实体类转json处理. 第一种:实体类Person public static void main(String[] args) { Person p1 = new Person(); ...
- c语言json数据转换成字符串,Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)...
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...
- 如何解析json字符串及返回json数据到前端
前言:最近需要实现的任务是:写若干个接口,并且接口中的请求数据是json格式,然后按照请求参数读取前端提前整理好的json数据,并且将json数据返回到服务器端. 主要的工具:Gson 2.8.2 ...
- SpringBoot(3) 获取后台返回字符串对象及json数据
下面讲解springboot-web工程 如何跳转到一个页面 和 获取一个后台返回的字符串,对象,以及json数据... 1.创建一个maven web工程 2.导入依赖 <!-- web支 ...
- c#加入json库引用_C#如何通过匿名类直接使用访问JSON数据详解
实验目的 在C#和Rest/Restful以及其它的Web服务交互过程中,大量使用到JSON传递数据,如何快捷的转化C#对象到JSON和转化JSON到C#对象,成为开发过程中频繁使用的内容.传统的方式 ...
- java curl json_POST请求发送json数据java HttpUrlConnection
我开发了一个java代码,使用URL和HttpUrlConnection将以下cURL转换为java代码.卷曲是: curl -i 'http://url.com' -X POST -H " ...
- Java读取数据库的数据并转换为json数据
转换JSON格式需要一个org.json.jar库,网上一搜都有. [java] view plain copy [java] view plain copy [java] view plain ...
- php怎么传json数据_php和js如何通过json互相传递数据相关问题探讨
当我们在结合php和javascript实现某些功能时,经常会用到json.json是js的一种数据格式,可以直接被js解析.而php无法直接读取json数据,但是php提供了json_decode函 ...
最新文章
- How to read a book
- php定时删除文件夹下文件(清理缓存文件)
- ###《Effective STL》--Chapter2
- 主函数 main WinMain _tmain _tWinMain 的区别
- Vue(MVVM)、React(MVVM)、Angular(MVC)对比
- 一图读懂马云与阿里20年:互联网巨头是如何养成的?
- DateFormat PHP Class (php 处理日期)
- 是否进行“ git导出”(如“ svn导出”)?
- FileZilla:425 Can't open data connection for transfer of解决办法
- 使IE6支持png透明图片
- Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()
- 腾讯视频QLV格式转换为MP4格式
- QQ空间迁移_【小米摄像头跨局域网NAS存储】
- Js中${}字符串拼接
- 22-3-16Java冒泡排序
- TL民营医院奖金分配方案比较研究
- PMML 预测模型教程
- 集成产品开发,不让你的产品变现脚踩西瓜皮
- 一块硬盘装了黑苹果 一块硬盘装了win7_十分钟学会自己装电脑系统! 看完这篇,咱们单枪匹马,不求人,就是干!...
- 牛客练习赛51(C题 勾股定理)
热门文章
- 根据窗口名称查找关键字弹性域用到的表,列等信息
- [轉載]用PHP的ob_start();控制您的浏览器cache!
- java long double精度丢失_long long类型转double类型部分精度丢失问题
- Java高级 —— 泛型
- 如何快速清空Linux中的大文件?
- 后端技术:消息队列MQ/JMS/Kafka相关知识介绍
- C#中的几个实用的代码
- jio文件 久其_功能强大的Windows文件管理器工具
- 360浏览器打不开微信的连接服务器,上午还能打开,下午360浏览器打不开微信公 – 手机爱问...
- eclipse安卓工程的构建、配置连接模拟器、安卓工程结构介绍