feat(reasoner): json_get support JSONArray (#233)

This commit is contained in:
wenchengyao 2024-05-07 14:47:32 +08:00 committed by GitHub
parent 649513572f
commit 148c17f668
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 54 additions and 2 deletions

View File

@ -14,6 +14,7 @@
package com.antgroup.openspg.reasoner.udf.builtin.udf; package com.antgroup.openspg.reasoner.udf.builtin.udf;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath; import com.alibaba.fastjson.JSONPath;
import com.antgroup.openspg.reasoner.udf.model.UdfDefine; import com.antgroup.openspg.reasoner.udf.model.UdfDefine;
@ -38,8 +39,19 @@ public class JsonStringGet {
return result; return result;
} }
} }
} catch (Exception e) { } catch (Exception e1) {
return ""; try {
JSONArray jsonArray = JSON.parseArray(plainJson);
for (Object item : jsonArray) {
JSONObject jsonObject = (JSONObject) item;
Object result = JSONPath.eval(jsonObject, jsonPath);
if (result != null) {
return result;
}
}
} catch (Exception e2) {
return "";
}
} }
return ""; return "";
} }

View File

@ -74,6 +74,46 @@ public class UdfTest {
Assert.assertEquals(rst, "123"); Assert.assertEquals(rst, "123");
} }
@Test
public void testJsonGet1() {
UdfMng mng = UdfMngFactory.getUdfMng();
String params = "[{'v':'123'}]";
IUdfMeta udfMeta =
mng.getUdfMeta("json_get", Lists.newArrayList(KTString$.MODULE$, KTString$.MODULE$));
Object rst = udfMeta.invoke(params, "$.v");
Assert.assertEquals(rst, "123");
}
@Test
public void testJsonGet2() {
UdfMng mng = UdfMngFactory.getUdfMng();
String params = "[{'v':'123'}, {'k':'456'}]";
IUdfMeta udfMeta =
mng.getUdfMeta("json_get", Lists.newArrayList(KTString$.MODULE$, KTString$.MODULE$));
Object rst = udfMeta.invoke(params, "$.k");
Assert.assertEquals(rst, "456");
}
@Test
public void testJsonGet3() {
UdfMng mng = UdfMngFactory.getUdfMng();
String params = "[{'v': {'v1': '111', 'v2': '222'}}, {'k': {'k1': '333', 'k2': '444'}}]";
IUdfMeta udfMeta =
mng.getUdfMeta("json_get", Lists.newArrayList(KTString$.MODULE$, KTString$.MODULE$));
Object rst = udfMeta.invoke(params, "$.k.k2");
Assert.assertEquals(rst, "444");
}
@Test
public void testJsonGet4() {
UdfMng mng = UdfMngFactory.getUdfMng();
String params = "[{'案由': '打架斗殴', '日期': '20240101'}, {'案由': '制造毒品', '日期': '20240202'}]";
IUdfMeta udfMeta =
mng.getUdfMeta("json_get", Lists.newArrayList(KTString$.MODULE$, KTString$.MODULE$));
Object rst = udfMeta.invoke(params, "$[案由 rlike '(.*)毒品(.*)'].案由");
Assert.assertEquals(rst, "制造毒品");
}
@Test @Test
public void testRdfProperty() { public void testRdfProperty() {
UdfMng mng = UdfMngFactory.getUdfMng(); UdfMng mng = UdfMngFactory.getUdfMng();