fastjson自带JsonPath与json-path比较
2019-08-07 21:04
483 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/formemorywithyou/article/details/98784420
场景
fastjson从1.2版本开始支持JsonPath语法,但是在部分情境下还是无法很好的支持。例如下面的json结构:
{ "store": { "book": [{ "title": "Java虚拟机", "price": 20 }, { "title": "Head First 设计模式", "price": 72 }, { "title": "重构:改善既有代码的设计", "isbn": "123", "price": 38 }, { "title": "Spring实践4", "isbn": "321", "price": 32 }, { "title": "图解HTTP", "isbn": "543", "price": 25 }], "bicycle": { "color": "red", "price": 219 } } }
需要取出book中的title和price字段,理想情况是这样的:
[{ "title": "Java虚拟机", "price": 20 }, { "title": "Head First 设计模式", "price": 72 }, { "title": "重构:改善既有代码的设计", "price": 38 }, { "title": "Spring实践4", "price": 32 }, { "title": "图解HTTP", "price": 25 }]
测试
引入fastjson/json-path版本如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.4.0</version> </dependency>
java代码:
import com.alibaba.fastjson.JSONPath; import com.jayway.jsonpath.JsonPath; public class JsonPathTest { public static void main(String[] args) { String json = "{\"store\": {\"book\": [{\"title\": \"Java虚拟机\",\"price\": 20}, {\"title\": \"Head First 设计模式\",\"price\": 72}, {\"title\": \"重构:改善既有代码的设计\",\"isbn\": \"123\",\"price\": 38}, {\"title\": \"Spring实践4\",\"isbn\": \"321\",\"price\": 32}, {\"title\": \"图解HTTP\",\"isbn\": \"543\",\"price\": 25}],\"bicycle\": {\"color\": \"red\",\"price\": 219}}}"; String jsonPath = "$['store']['book'][:-1]['price','title']"; Object obj = JSONPath.read(json, jsonPath); System.out.println(obj); jsonPath = "$.store.book.[*].['title', 'price']"; obj = JsonPath.parse(json).read(jsonPath); String str = JSONObject.toJSONString(obj); System.out.println(str); } }
测试结果:
[[20,72,38,32,25], ["Java虚拟机","Head First 设计模式","重构:改善既有代码的设计","Spring实践4","图解HTTP"]] [{"title":"Java虚拟机","price":20},{"title":"Head First 设计模式","price":72},{"title":"重构:改善既有代码的设计","price":38},{"title":"Spring实践4","price":32},{"title":"图解HTTP","price":25}]
从结果上看json-path可以实现json带list结构的结果筛选,而fastjson只提取了两个列表(也可能我的语法不对,但是以目前的版本,我查了很多资料都没有找到一个更好的语法实现,如果有请联系我)。
参考资料
相关文章推荐
- java中对于JSON 的处理 fastjson gson 系统自带的JSON 的选择
- 主流JSON引擎性能比较(GSON,FASTJSON,JACKSON,JSONSMART)
- 各个JSON技术的比较(Jackson,Gson,Fastjson)的对比
- fastjson 反序列化漏洞笔记,比较乱
- json-lib,Jackson,Gson,FastJson比较
- fastJson之JSONPath使用(转)
- FastJson、Gson、Jackson json解析性能比较
- fastjson使用(九) -- JSONPath使用
- fastJson,jackJson,Gson性能比较
- 比较protoStuff和fastjson以及实现Serializable接口序列化的效率问题
- Json,Gson,FastJson解析数据比较
- fastJson 之 JSONPath使用
- JSON 解析库的使用 :Gson 和 fast-json比较
- fastjson比较重要的几点
- 各种JSON比较(josn-lib,jackson,gson,fastjson)
- 各个JSON技术的比较(Jackson,Gson,Fastjson)的对比
- fastjson,gson的性能比较
- fastjson(十)JSONPath 的使用(二)
- [转] 各种Json解析工具比较 - json-lib/Jackson/Gson/FastJson
- Json解析速度比较-Android API、Gson、Fastjson