JsonPathUtils.java 2.89 KB
package com.diligrp.tax.central.utils;

import com.diligrp.tax.central.exception.TaxAgentServiceException;
import com.diligrp.tax.central.type.TaxSystemType;
import com.jayway.jsonpath.JsonPath;
import tools.jackson.core.type.TypeReference;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

/**
 * @Author: zhangmeiyang
 * @CreateTime: 2025-11-11 11:21
 * @Version: todo
 */
public class JsonPathUtils {

    public static Object parse(String httpResult, String dataPath) {
        Optional.ofNullable(httpResult).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL));
        Optional.ofNullable(dataPath).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.PARAMETER_IS_NOT_PARSED_CORRECTLY));
        return JsonPath.read(httpResult, dataPath);
    }

    public static String parseString(String httpResult, String dataPath) {
        Optional.ofNullable(httpResult).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL));
        Optional.ofNullable(dataPath).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.PARAMETER_IS_NOT_PARSED_CORRECTLY));
        var res = JsonPath.read(httpResult, dataPath);
        return Optional.ofNullable(res).map(Object::toString).orElse("");
    }

    /**
     * 解析到map
     *
     * @param httpResult
     * @param dataPathMap 数据路径图
     * @return {@link Map }<{@link String }, {@link Object }>
     */
    public static Map<String, Object> parseToMap(String httpResult, Map<String, String> dataPathMap) {
        Map<String, Object> res = new HashMap<>();
        Optional.ofNullable(httpResult).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL));
        Optional.ofNullable(dataPathMap).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.PARAMETER_IS_NOT_PARSED_CORRECTLY));
        dataPathMap.forEach((k, v) -> res.put(k, JsonPath.read(httpResult, v)));
        return res;
    }

    /**
     * 解析到map
     *
     * @param resultObject    结果对象
     * @param dataPathMapJson
     * @return {@link Map }<{@link String }, {@link Object }>
     */
    public static Map<String, Object> parseToMap(Object resultObject, String dataPathMapJson) {
        Map<String, Object> res = new HashMap<>();
        String httpResult = JsonUtils.toJsonString(resultObject);
        Map<String, String> dataPathMap = JsonUtils.fromJsonString(dataPathMapJson, new TypeReference<HashMap<String, String>>() {
        });
        Optional.ofNullable(httpResult).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.REMOTE_SERVICE_CALLS_ARE_EXCEPTIONAL));
        Optional.ofNullable(dataPathMap).orElseThrow(() -> new TaxAgentServiceException(TaxSystemType.PARAMETER_IS_NOT_PARSED_CORRECTLY));
        dataPathMap.forEach((k, v) -> res.put(k, JsonPath.read(httpResult, v)));
        return res;
    }
}