【技术累积】【点】【java】【1】JSONPath
闲聊
以后周中每天一篇这种偏短的文章,周末就发长一点的文章,不然自己实在是懒,懒成了习惯了。。。
开始
首先需要明确的是,这里说的是阿里巴巴的fastjson包中的JSONPath,不是jsonPath,两者干的都是一件事儿,但用法什么的还是有较大不同。
可以大概浏览下这两篇文章:
其实说白了这东西就是做解析json串的,但是有一些比较好用的方法。
当然,其更加强大的事情是当做对象查询语言使用(上一篇引用中很详细的说了)
对于我而言,最吸引我的,是直接从json串的String中取值,判断等。
不多说,上代码:
@Test
public void testJsonPath(){
String jsonText = "{\"name\":\"shitHappens\",\"age\":26,\"gender\":\"male\"}";
JSONObject jsonObject = JSONObject.parseObject(jsonText);
Object output = JSONPath.eval(jsonObject,"$.name");
LOGGER.info("eval结果:{}", JSONObject.toJSONString(output));
}
@Test
public void testJsonPath2(){
String jsonText = "{\"names\":[{\"name\":\"shitHappens\",\"age\":26,\"gender\":\"male\"},{\"name\":\"shitHappens\",\"age\":2,\"gender\":\"male\"}]}";
JSONObject jsonObject = JSONObject.parseObject(jsonText);
Object output = JSONPath.eval(jsonObject,"$.names[1].age");
List<Integer> ages = (List<Integer>) JSONPath.eval(jsonObject,"$..age");
LOGGER.info("eval结果:{}", JSONObject.toJSONString(output));
}
@Test
public void testJSONPath(){
String jsonText = "{\"names\":[{\"name\":\"shitHappens\",\"age\":26,\"gender\":\"male\"},{\"name\":\"shitHappens\",\"age\":2,\"gender\":\"male\"}]}";
JSONObject jsonObject = JSONObject.parseObject(jsonText);
String path = "$.names[0].name";
// JSONPath.arrayAdd(jsonObject,"");
JSONPath jsonPath = JSONPath.compile(path);
jsonPath.getPath();
boolean contains = JSONPath.contains(jsonObject,path);
boolean containsValue = JSONPath.containsValue(jsonObject,path,"shitHappens");
int size = JSONPath.size(jsonObject,path);
JSONPath.set(jsonObject,path,"dddd");
LOGGER.info("json串:{}",jsonObject);
}
几个点吧:
- eval()方法,取值,关键是后面的路径的语法;
- contains(),containsValue(),判断值的有无;
- set(),设置值;
其实用起来很方便,关键是用的场景了吧,不过我还用的少,大概是那种String的json串,然后不是完全解析的场景吧。
最后还是学学别个的测试代码吧,用断言实现自动化
public void test_entity() throws Exception {
Entity entity = new Entity(123, new Object()); Assert.assertSame(entity.getValue(), JSONPath.eval(entity, "$.value"));
Assert.assertTrue(JSONPath.contains(entity, "$.value"));
Assert.assertTrue(JSONPath.containsValue(entity, "$.id", 123));
Assert.assertTrue(JSONPath.containsValue(entity, "$.value", entity.getValue()));
Assert.assertEquals(2, JSONPath.size(entity, "$"));
Assert.assertEquals(0, JSONPath.size(new Object[], "$"));
} public static class Entity {
private Integer id;
private String name;
private Object value; public Entity() {}
public Entity(Integer id, Object value) { this.id = id; this.value = value; }
public Entity(Integer id, String name) { this.id = id; this.name = name; }
public Entity(String name) { this.name = name; } public Integer getId() { return id; }
public Object getValue() { return value; }
public String getName() { return name; } public void setId(Integer id) { this.id = id; }
public void setName(String name) { this.name = name; }
public void setValue(Object value) { this.value = value; }
}
结束
东西还是要一搞好就记录下来的,毕竟,博客这些的目的就是记录,巩固当时的记忆,方便日后的快速回顾么,干!
- JSONPath.eval()
【技术累积】【点】【java】【1】JSONPath的更多相关文章
- (转)如何学习Java技术?谈Java学习之路
51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- Atitit. 。Jna技术与 解决 java.lang.Error: Invalid memory access
Atitit. .Jna技术与 解决 java.lang.Error: Invalid memory access 1. 原因与解决1 2. jNA (这个ms sun 的)1 3. Code1 4. ...
- 公共技术点之 Java 反射 Reflection
本文摘录地址: http://codekk.com/open-source-project-analysis/detail/Android/Mr.Simple/%E5%85%AC%E5%85%B1%E ...
- 【技术累积】【线】【java】【2】AOP
思维导图 基础概念 翻译:面向切面编程,或面向方面编程: 是OOP的重要补充: 切面:传统的OOP构建的是对象之间的关系,是一种垂直的关系:假设,OOP程序是一个圆筒,那么与业务或逻辑无关的东西,比如 ...
- 【技术累积】【点】【java】【21】序列化二三事
基础概念 把对象等转为二进制进行传输的是序列化,反之为反序列化: 应用场景一般为读写文件,传输数据/接口调用: Externalizable和Serializable java的序列化方式有两种: S ...
- 【技术累积】【点】【java】【30】代理模式
基础 代理模式是Java常见的设计模式之一.所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 什么是代理 参考现实生活中的代理 比如某个品牌的某个省的代理商,作 ...
- 【技术累积】【点】【java】【29】MapUtils
内容 是Apache组织下的commons-collections包中的工具类 <dependency> <groupId>commons-collections</gr ...
- 【技术累积】【点】【java】【27】@JSONField
@JSONField 该注解隶属于阿里fastjson,方便fastjson处理对象时的一些操作 源码 @Retention(RetentionPolicy.RUNTIME) @Target({ El ...
随机推荐
- [转载]ext4文件系统的delalloc选项造成单次写延迟增加的分析
转载http://www.cnblogs.com/cobbliu/p/5603472.html 最近我们的服务进程遇到kill -15后处于Z的状态,变为了僵尸进程,经过/proc/{thread_i ...
- NOIP2012 DAY2 T2借教室
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...
- wordpress常见问题
一.WordPress新手必须注意的两个设置 第一 :设置里面的媒体--关闭wordpress缩略图功能如果开启了三种缩略图,博客上传的图片就会生成不同大小的三份,而基本上博客又没有使用,这样下来严重 ...
- Linux 命令未自动提示补全
解决方法: yum install -y bash-completion 退出当前界面,重新进入即可.
- HDU 4500
哈哈,好爽好爽,刷水题报复社会啦... 哥这次省赛一定要拿一等奖,让你小看我,让你小看我.... #include <iostream> #include <cstdio> # ...
- swift初始化
swift初始化 class INIT: NSObject { // 一个结构体的初始化 // 1.存储属性的初始化 struct Fahrenheit { var temperature :Doub ...
- GMGDC专訪戴亦斌:具体解释QAMAster全面測试服务6大功能
GMGDC专訪戴亦斌:具体解释QAMAster全面測试服务6大功能 2014/10/10 · Testin · 业界资讯 在9月24-25日第三届全球移动游戏开发人员大会上,Testin云測COO戴亦 ...
- MySQL 时间类型字段的分析
日期类型 存储空间 日期格式 日期范围---------- ...
- TextView高级
前言 开门见山,这一篇博客主要讲一下在Android开发中,UI控件TextView的一些使用方式,并且通过四个例子实现一般项目中需要的效果来讲解TextView的使用.并且在之后的一段时间之内,都会 ...
- Windows 10 MBR转GPT分区
注意:分区有风险,操作需谨慎,提前备份好数据. 说明: 1.有“系统保留”的分区,可以直接删除,用来做GPT分区的UEFI启动分区. 2.没有“系统保留”分区的,需要在分区最前面调整分区大小,留出30 ...