JSONQuery v0.2.5,更简单的使用 Gson 解析 JSON

鹞之神乐
 鹞之神乐
发布于 2018年03月01日
收藏 7

JSONQuery v0.2.5 发布,更新内容如下:

本次更新修复了一个bug,增加了两个新重载方法,更方便的帮助把结果反序列化为Java对象。

Maven

<dependency>
    <!-- JSONQuery @ https://JSONQuery.kagura.me -->
    <groupId>me.kagura</groupId>
    <artifactId>JSONQuery</artifactId>
    <version>0.2.5</version>
</dependency>

新增方法示例:

// v0.2.5新增
//将选择结果反序列化为普通对象
Post post = JSONQuery.select(json, "comment_info > [2]", Post.class);
//将选择结果反序列化为普通对象数组
Post[] postArray = JSONQuery.select(json, "comment_info", Post[].class);
//将选择结果反序列化为泛型类型List<Post>
Type type = new TypeToken<List<Post>>() {}.getType();
List<Post> postList = JSONQuery.select(json, "comment_info", type);

完整示例:

@Test
    public void Test() throws TypeNotMismatchException, FieldNotExistException {
        String json = "" +
                "{\n" +
                "  \"errno\": 0,\n" +
                "  \"errmsg\": 成功,\n" +
                "  \"user\": \"{\\\"user_id\\\":643361255,\\\"user_name\\\":\\\"鹞之神乐\\\",\\\"user_sex\\\":1,\\\"user_status\\\":1}\",\n" +
                "  \"comment_info\": [\n" +
                "    {\n" +
                "      \"tid\": \"5504460056\",\n" +
                "      \"pid\": \"116776960983\",\n" +
                "      \"cid\": \"116857893053\"\n" +
                "    },\n" +
                "    {\n" +
                "      \"tid\": \"5504460056\",\n" +
                "      \"pid\": \"116776960983\",\n" +
                "      \"cid\": \"116858057626\"\n" +
                "    },\n" +
                "    {\n" +
                "      \"tid\": \"5504460056\",\n" +
                "      \"pid\": \"116776960983\",\n" +
                "      \"cid\": \"116880757453\"\n" +
                "    }\n" +
                "  ],\n" +
                "  \"data\": {\n" +
                "    \"comment_list\": {\n" +
                "      \"116776891765\": {\n" +
                "        \"comment_num\": 3,\n" +
                "        \"comment_list_num\": 4\n" +
                "      },\n" +
                "      \"116776960983\": {\n" +
                "        \"comment_num\": 4,\n" +
                "        \"comment_list_num\": 4\n" +
                "      }\n" +
                "    }\n" +
                "  }\n" +
                "}";

        //获取根元素errno
        JsonResult jsonResult = JSONQuery.select(json, "errno");
        //获取根元素errno,并转换为int
        int errno = jsonResult.getAsInt();
        //获取根元素data中的comment_list
        jsonResult = JSONQuery.select(json, "data > comment_list");
        //正则过滤出属性数组,针对一部分拿对象当数组用的情况
        jsonResult = JSONQuery.select(json, "data > comment_list > [\\d+]");
        //获取数组指定位置的元素
        jsonResult = JSONQuery.select(json, "comment_info > [2]");
        //获取数组指定位置的元素 负数坐标
        jsonResult = JSONQuery.select(json, "comment_info > [-1]");
        //针对某个字符串属性的值又是个json字符串的情况
        jsonResult = JSONQuery.select(json, "user > user_name");
        //jsonResult作为参数替代json字符串
        JsonResult data = JSONQuery.select(json, "data");
        jsonResult = JSONQuery.select(data, "comment_list");
        //将json字符串转换为JsonResult
        jsonResult = JSONQuery.select(json, "");
        jsonResult = JSONQuery.select(json, null);      

        // v0.2.5新增
        //将选择结果反序列化为普通对象
        Post post = JSONQuery.select(json, "comment_info > [2]", Post.class);
        //将选择结果反序列化为普通对象数组
        Post[] postArray = JSONQuery.select(json, "comment_info", Post[].class);
        //将选择结果反序列化为泛型类型List<Post>
        Type type = new TypeToken<List<Post>>() {}.getType();
        List<Post> postList = JSONQuery.select(json, "comment_info", type);
    }

链接:

官网:https://JSONQuery.kagura.me
GitHub:https://github.com/KingFalse/JSONQuery
GitEE:https://gitee.com/Kagura/JSONQuery
OSChina:https://www.oschina.net/p/jsonquery

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:JSONQuery v0.2.5,更简单的使用 Gson 解析 JSON
加载中

最新评论(9

抢小孩糖吃
抢小孩糖吃

引用来自“wenshao”的评论

为啥不用fastjson?

引用来自“鹞之神乐”的评论

如果是指底层的话fastjson兼容性不好,举个例子:String json = "{id:你好}";用fastjson直接报错。

引用来自“抢小孩糖吃”的评论

{id:你好}都不是标准的Json格式

引用来自“鹞之神乐”的评论

嗯,确实不标准,我是做爬虫开发的,遇到过很多这种情况,记得中国移动APP就有这个情况,有个字段值是中文而且不带双引号,然后fastjson直接报错,Gson确可以正常解析。
如果规模很大建议还是用fastjson,速度差距不是一点半点的
鹞之神乐
鹞之神乐

引用来自“郁白”的评论

支持一下 10年的时候 就有json 查询器的需求 自己开发了一个 工具类使用的。。 当时查询方式是通过 propertyA:propertyB:propertyC 这种冒号分隔的方式查询的。。 作者这个更强大。
谢谢支持
鹞之神乐
鹞之神乐

引用来自“wenshao”的评论

为啥不用fastjson?

引用来自“鹞之神乐”的评论

如果是指底层的话fastjson兼容性不好,举个例子:String json = "{id:你好}";用fastjson直接报错。

引用来自“抢小孩糖吃”的评论

{id:你好}都不是标准的Json格式
嗯,确实不标准,我是做爬虫开发的,遇到过很多这种情况,记得中国移动APP就有这个情况,有个字段值是中文而且不带双引号,然后fastjson直接报错,Gson确可以正常解析。
抢小孩糖吃
抢小孩糖吃

引用来自“wenshao”的评论

为啥不用fastjson?

引用来自“鹞之神乐”的评论

如果是指底层的话fastjson兼容性不好,举个例子:String json = "{id:你好}";用fastjson直接报错。
{id:你好}都不是标准的Json格式
鹞之神乐
鹞之神乐

引用来自“wenshao”的评论

为啥不用fastjson?
如果是指底层的话fastjson兼容性不好,举个例子:String json = "{id:你好}";用fastjson直接报错。
郁白
支持一下 10年的时候 就有json 查询器的需求 自己开发了一个 工具类使用的。。 当时查询方式是通过 propertyA:propertyB:propertyC 这种冒号分隔的方式查询的。。 作者这个更强大。
wenshao
wenshao
为啥不用fastjson?
鹞之神乐
鹞之神乐

引用来自“郏高阳”的评论

如果用法和原来的一样,不是select封装了很多便捷的方法我或许会考虑,目前用法都变了,我比较讨厌这类框架,没发现多少好处
初衷就是为了方便选择元素。至于选择结果JsonResult完全可以当做JsonElement使用。
郏高阳
郏高阳
如果用法和原来的一样,不是select封装了很多便捷的方法我或许会考虑,目前用法都变了,我比较讨厌这类框架,没发现多少好处
返回顶部
顶部