json-path 解析

引入 jar

<!-- json 解析 -->
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>2.4.0</version>
        </dependency>
{
  "action": "/interface.service/xxx/queryBlackUserData",
  "all": "1",
  "result": {
    "count": 2,
    "tenant_count": 2,
    "records": [
      {
        "name": "张三",
        "pid": "500234199212121212",
        "mobile": "18623456789",
        "applied_at": "3",
        "confirmed_at": "5",
        "confirm_type": "overdue",
        "loan_type": 1,
        "test": "mytest",
        "all": "2"
      },
      {
        "name": "李四",
        "pid": "500234199299999999",
        "mobile": "13098765432",
        "applied_at": "1",
        "confirmed_at": "",
        "confirm_type": "overdue",
        "loan_type": 3,
        "all": "3"
      },
      {
        "name": "王五",
        "pid": "50023415464654659",
        "mobile": "1706454894",
        "applied_at": "-1",
        "confirmed_at": "",
        "confirm_type": "overdue",
        "loan_type": 3
      }
    ],
    "all": "4"
  },
  "code": 200,
  "subtime": "1480495123550",
  "status": "success",
  "ok": 3
}

json-path 代码解析

import com.google.common.io.Files;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

@Slf4j
public class JsonTest {

    private static String json = "";
    private static Gson gson = new GsonBuilder()
            .enableComplexMapKeySerialization()
            .setDateFormat("yyyy-M-d H:mm:ss")
            .create();

    @Before
    public void before() {
        try {
            File file = Paths.get(Thread.currentThread().getContextClassLoader().getResource("demo.json").toURI()).toFile();
            log.info("print file exits {}",file.exists());
            List<String> readLines = Files.readLines(file, Charset.defaultCharset());
            json = readLines.stream().collect(Collectors.joining());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testReadJson() throws URISyntaxException {

        log.info("print json message {}",json);

        DocumentContext context = JsonPath.parse(json);
        // 输出姓名
        List<String> names = (List<String>) context.read("$.result.records[*].name");
        Optional.ofNullable((gson.toJson(names))).ifPresent(log::info);

        // 返回数组所有值
        //两种方式接收json
        List<Map<String,Object>> records = context.read("$.result.records[*]");
        Optional.ofNullable(gson.toJson(records)).ifPresent(log::info);

        List<Person> personList = context.read("$.result.records[*]");
        Optional.ofNullable(gson.toJson(personList)).ifPresent(log::info);

        List<String> nameList0and2List = context.read("$.result.records[0,2].name");
        Optional.ofNullable(gson.toJson(nameList0and2List)).ifPresent(log::info);

        // not contain last value
        List<String> nameList0to2List = context.read("$.result.records[0:2].name");
        Optional.ofNullable(gson.toJson(nameList0to2List)).ifPresent(log::info);

        List<String> lastTwoNames = context.read("$.result.records[-2:].name");
        Optional.ofNullable(gson.toJson(lastTwoNames)).ifPresent(log::info);

        List<String> nameFromOne = context.read("$.result.records[1:].name");
        Optional.ofNullable(gson.toJson(nameFromOne)).ifPresent(log::info);

        List<String> nameEndTwo = context.read("$.result.records[:3].name");
        Optional.ofNullable(gson.toJson(nameEndTwo)).ifPresent(log::info);

        personList = context.read("$.result.records[?(@.name == '李四')]");
        Optional.ofNullable(gson.toJson(personList)).ifPresent(log::info);

        personList = context.read("$.result.records[?(@.test)]");
        Optional.ofNullable(gson.toJson(personList)).ifPresent(log::info);

        List<String> existAlllist = context.read("$..all");
        Optional.ofNullable(gson.toJson(existAlllist)).ifPresent(log::info);

        //12 以当前json的某个值为条件查询 这里ok为1 取出records数组中applied_at等于1的数组
        List<String> ok = context.read("$.result.records[?(@.applied_at == $['ok'])]");
        Optional.ofNullable(gson.toJson(ok)).ifPresent(log::info);

        //13 正则匹配
        personList = context.read("$.result.records[?(@.pid =~ /.*999/i)]");
        Optional.ofNullable(gson.toJson(personList)).ifPresent(log::info);

        //14 多条件
        List<String> mobile = context.read("$.result.records[?(@.all == '2' || @.name == '李四' )].mobile");
        Optional.ofNullable(gson.toJson(mobile)).ifPresent(log::info);

        //14 查询数组长度
        Integer length01 = context.read("$.result.records.length()");
        Optional.ofNullable(gson.toJson(mobile)).ifPresent(log::info);

        //15 查询list里面每个对象长度
        List<Integer> length02 = context.read("$.result.records[?(@.all == '2' || @.name == '李四' )].length()");
        Optional.ofNullable(gson.toJson(length02)).ifPresent(log::info);

        //16 最大值
        double maxV = context.read("$.max($.result.records[0].loan_type,$.result.records[1].loan_type,$.result.records[2].loan_type)");
        Optional.ofNullable(gson.toJson(maxV)).ifPresent(log::info);

        //17 最小值
        double minV = context.read("$.min($.result.records[0].loan_type,$.result.records[1].loan_type,$.result.records[2].loan_type)");
        Optional.ofNullable(gson.toJson(minV)).ifPresent(log::info);

        //18 平均值
        double avgV = context.read("$.avg($.result.records[0].loan_type,$.result.records[1].loan_type,$.result.records[2].loan_type)");
        Optional.ofNullable(gson.toJson(avgV)).ifPresent(log::info);

        //19 标准差
        double stddevV = context.read("$.stddev($.result.records[0].loan_type,$.result.records[1].loan_type,$.result.records[2].loan_type)");
        Optional.ofNullable(gson.toJson(stddevV)).ifPresent(log::info);

    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容