From b6755ed1088212be0f4d2ed6991747b8e448beb1 Mon Sep 17 00:00:00 2001 From: "feihu.wang" Date: Sun, 18 Oct 2020 12:39:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20https://gitee.com/freshday/radar/issues/?= =?UTF-8?q?I1X6KG=20=E5=9C=A8=E9=85=8D=E7=BD=AE=E6=8A=BD=E8=B1=A1=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=88=96=E7=BB=9F=E8=AE=A1=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E4=BA=86=E9=A2=84=E5=A4=84=E7=90=86=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E5=9C=A8=E6=B5=8B=E8=AF=95=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E5=B0=B1=E4=BC=9A=E6=8A=A5=E9=94=99=20feihu=20wang?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/engine/AntiFraudEngineImpl.java | 11 +- .../service/impl/util/JsonParserUtil.java | 122 ++++++++++++++++++ 2 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/util/JsonParserUtil.java diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/engine/AntiFraudEngineImpl.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/engine/AntiFraudEngineImpl.java index ced3517..9551e2f 100644 --- a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/engine/AntiFraudEngineImpl.java +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/engine/AntiFraudEngineImpl.java @@ -14,6 +14,7 @@ import com.pgmmers.radar.service.engine.vo.AdaptationResult; import com.pgmmers.radar.service.engine.vo.HitObject; import com.pgmmers.radar.service.engine.vo.RiskObject; import com.pgmmers.radar.service.impl.dnn.EstimatorContainer; +import com.pgmmers.radar.service.impl.util.JsonParserUtil; import com.pgmmers.radar.service.model.AbstractionService; import com.pgmmers.radar.service.model.ActivationService; import com.pgmmers.radar.service.model.DataListsService; @@ -149,6 +150,9 @@ public class AntiFraudEngineImpl implements AntiFraudEngine { Object searchFieldVal = data.get("fields").get(searchField); if (searchFieldVal == null) { searchFieldVal = data.get("preItems").get(searchField); + if (searchFieldVal == null) { + searchFieldVal = JsonParserUtil.value(data.get("preItems"), searchField, null); + } } if (searchFieldVal == null) { result.setMsg("search field value eq null!"); @@ -168,8 +172,11 @@ public class AntiFraudEngineImpl implements AntiFraudEngine { } } if (functionFieldType == null) { - result.setMsg("function field type is null"); - return result; + // 如果field字段里面没有改字段,因为预处理字段没有字段类型,暂时设置为String + // TODO: 目前只有高级函数使用了 functionFieldType。 + //result.setMsg("function field type is null"); + //return result; + functionFieldType = FieldType.valueOf("STRING"); } } diff --git a/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/util/JsonParserUtil.java b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/util/JsonParserUtil.java new file mode 100644 index 0000000..6dc31ae --- /dev/null +++ b/radar-service-impl/src/main/java/com/pgmmers/radar/service/impl/util/JsonParserUtil.java @@ -0,0 +1,122 @@ +package com.pgmmers.radar.service.impl.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.StringTokenizer; + +/** + * @author 爱好者提供. + * @since 2020-10-18 + */ +public class JsonParserUtil { + + private final static Logger logger = LoggerFactory.getLogger(JsonParserUtil.class); + + private static final String AQL_SEPARATOR = "."; + + /** + * 获取方法链的值 + */ + public static JSONObject jsonObject(JSONObject json, String aql) { + logger.debug("#获取 json 节点 safety ".concat(aql)); + StringTokenizer token = new StringTokenizer(aql, AQL_SEPARATOR); + try { + while (token.hasMoreElements()) { + String args_string = token.nextToken(); + json = json.getJSONObject(args_string); + } + return json; + } catch (Exception e) { + logger.warn("解析 json 节点".concat(aql).concat("错误:"), e); + } + return new JSONObject(); + } + + /** + * 获取安全方法链的 JSONArray + */ + public static JSONArray array(JSONObject json, String aql) { + logger.debug("#获取 json 节点组 safety ".concat(aql)); + JSONArray json_array = new JSONArray(); + StringTokenizer token = new StringTokenizer(aql, AQL_SEPARATOR); + try { + while (token.hasMoreElements()) { + String args_string = token.nextToken(); + if (token.hasMoreElements()) { + json = json.getJSONObject(args_string); + } else { + json_array = json.getJSONArray(args_string); + } + } + } catch (Exception e) { + logger.warn("解析 json 节点".concat(aql).concat("错误:"), e); + } + if (json_array == null) { + json_array = new JSONArray(); + } + return json_array; + } + + /** + * 获取安全方法链的值,方法中出现错误返回传入的 value + */ + @SuppressWarnings("unchecked") + public static T value(String jsonStr, String aql, T default_result) { + logger.debug("#获取 json 节点 safety ".concat(aql)); + JSONObject json_object = JSONObject.parseObject(jsonStr); + StringTokenizer token = new StringTokenizer(aql, AQL_SEPARATOR); + T tmp_result = null; + try { + while (token.hasMoreElements()) { + String args_string = token.nextToken(); + if (token.hasMoreElements()) { + json_object = json_object.getJSONObject(args_string); + } else { + tmp_result = (T) json_object.get(args_string); + } + } + } catch (Exception e) { + String message = "解析 json 节点".concat(aql).concat("错误:"); + logger.warn(message, e); + } + default_result = (tmp_result == null) ? default_result : tmp_result; + return default_result; + } + + /** + * 获取安全方法链的值,方法中出现错误返回传入的 value + */ + @SuppressWarnings("unchecked") + public static T value(Object javaObject, String aql, T defaultValue) { + logger.debug("#获取 json 节点 safety ".concat(aql)); + JSONObject json_object = (JSONObject) JSONObject.toJSON(javaObject); + StringTokenizer token = new StringTokenizer(aql, AQL_SEPARATOR); + T tmp_result = null; + try { + while (token.hasMoreElements()) { + String args_string = token.nextToken(); + if (token.hasMoreElements()) { + json_object = json_object.getJSONObject(args_string); + } else { + tmp_result = (T) json_object.get(args_string); + } + } + } catch (Exception e) { + logger.warn("解析 json 节点".concat(aql).concat("错误:"), e); + } + defaultValue = (tmp_result == null) ? defaultValue : tmp_result; + return defaultValue; + } + + public static void main(String[] args) { + JSONObject jsonObject = JSONObject.parseObject("{\"a\":{\"b\":{\"c\":1}}}"); + System.out.println(JsonParserUtil.jsonObject(jsonObject, "a.b")); + Integer value = JsonParserUtil.value(jsonObject, "a.b.c", null); + System.out.println(value); + Integer value1 = JsonParserUtil.value("{\"a\":{\"b\":{\"c\":1}}}", "a.b.c", null); + System.out.println(value1); + } +} \ No newline at end of file