查看结果应用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.2 KiB

6 months ago
  1. package com.bfd.assemble.utils;
  2. import java.util.Map;
  3. import lombok.extern.slf4j.Slf4j;
  4. import com.alibaba.fastjson.JSON;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.alibaba.fastjson.JSONPath;
  7. import com.bfd.assemble.entity.Constants;
  8. /**
  9. * @author:jinming
  10. * @className:DataUtil
  11. * @version:1.0
  12. * @description: 获取dataValue的值
  13. * @Date:2023/11/1 9:54
  14. */
  15. @Slf4j
  16. public class DataUtil {
  17. /**
  18. *
  19. * @param key 传入的key
  20. * @param dataMap 数据map
  21. * @return 根据传入的参数进行判断解析返回正确的dataValue
  22. */
  23. public static Object getValue(String key, Map dataMap) {
  24. try {
  25. //公式为空直接就返回
  26. if(key.equals(Constants.EMPTY)){
  27. return Constants.EMPTY;
  28. }
  29. Object dataValue;
  30. String isJson = "#json#";
  31. if (key.contains(isJson)) {
  32. //进行第一次拆分,获取#json#前面的部分
  33. String[] keySplit = key.split(isJson);
  34. String firstDataKey = keySplit[0];
  35. String[] firstDataKeySplit = firstDataKey.split(":");
  36. //取出前半部分对应的JSON数据并转换为JSONObject
  37. String dataJson = (String) dataMap.get(firstDataKeySplit[0]);
  38. JSONObject dataJsonObject = JSON.parseObject(dataJson);
  39. //根据key的后半部分取出对应JSONObject中的值
  40. String firstDataKeyJson = (String) JSONPath.eval(dataJsonObject, firstDataKeySplit[1]);
  41. String secDataKey = keySplit[1];
  42. JSONObject firstDataJsonObject = JSON.parseObject(firstDataKeyJson);
  43. dataValue = JSONPath.eval(firstDataJsonObject, secDataKey);
  44. return dataValue;
  45. }
  46. String[] keySplit = key.split(":");
  47. String jsonPath = keySplit[1];
  48. String dataJson = (String) dataMap.get(keySplit[0]);
  49. JSONObject dataJsonObject = JSON.parseObject(dataJson);
  50. dataValue = JSONPath.eval(dataJsonObject, jsonPath);
  51. return dataValue;
  52. } catch (Exception e) {
  53. // TODO: handle exception
  54. log.error("jsonpath公式取值异常,",e);
  55. return null;
  56. }
  57. }
  58. }