代码拉取完成,页面将自动刷新
版本号2.2.9
通过数据库查询出来的字符串为JSONArray字符串
[{"DRUG":"硝苯地平","USAGE":"qd","DOSAGE":"1u"},{"DRUG":"阿托伐他汀","USAGE":"qd","DOSAGE":"1u"}]
json函数只能针对JSONObjcet进行解析,JSONArray应该怎么解析?
自己实现
bean模式,data -> 数据集名称
比如:
{"infos" : ["aa" , "bb" , "cc"] , "names" : [{"name" : "n1"} , {"name" : "n2"}]}
例子:
1.json2(data.select(infos))
2.json2(data.select(names) , "name")
public class JsonFunctionExt implements Function {
public Object execute(List<ExpressionData<?>> dataList, Context context, Cell currentCell) {
if (dataList.size() != 2) {
if(dataList.size() == 1){
Object obj = dataList.get(0);
if(obj instanceof BindDataListExpressionData){
return ((BindDataListExpressionData) obj).getData().get(0).getValue();
}else if(obj instanceof ObjectListExpressionData){
return ((ObjectListExpressionData)obj).getData().get(0);
}
}
return null;
} else {
List<String> objs = this.buildData(dataList.get(0));
String property = this.buildProperty(dataList.get(1));
if (CollectionUtil.isNotEmpty(objs)) {
ObjectMapper mapper = new ObjectMapper();
List<Object> list = new ArrayList<>();
try {
for (String obj : objs) {
Map<?, ?> map = (Map) mapper.readValue(obj, HashMap.class);
list.add(Utils.getProperty(map, property));
}
return list;
} catch (Exception var8) {
throw new ReportException(var8);
}
} else {
return null;
}
}
}
private List<String> buildData(ExpressionData<?> exprData) {
List<String> objs = new ArrayList<>();
if (exprData instanceof ObjectExpressionData) {
ObjectExpressionData objData = (ObjectExpressionData) exprData;
Object data = objData.getData();
if (data != null) {
objs.add(JSONUtil.toJsonStr(data));
}
} else {
if (exprData instanceof ObjectListExpressionData || exprData instanceof BindDataListExpressionData) {
List list = (List) exprData.getData();
for (Object data : list) {
if (!(data instanceof BindData)) {
data = new BindData(data);
}
Object tmp = ((BindData) data).getValue();
if (tmp instanceof List) {
List values = (List) tmp;
for (Object t : values) {
objs.add(JSONUtil.toJsonStr(t));
}
} else {
objs.add(JSONUtil.toJsonStr(tmp));
}
}
}
}
return objs.stream().filter(e -> StrUtil.isNotBlank(e)).filter(Objects::nonNull).collect(Collectors.toList());
}
private String buildProperty(ExpressionData<?> exprData) {
String obj = null;
if (exprData instanceof ObjectExpressionData) {
ObjectExpressionData objData = (ObjectExpressionData) exprData;
Object data = objData.getData();
if (data != null) {
obj = data.toString();
}
} else {
Object data;
List list;
if (exprData instanceof ObjectListExpressionData) {
ObjectListExpressionData listData = (ObjectListExpressionData) exprData;
list = listData.getData();
if (list.size() == 1) {
data = list.get(0);
if (data != null) {
obj = data.toString();
}
}
} else if (exprData instanceof BindDataListExpressionData) {
BindDataListExpressionData listData = (BindDataListExpressionData) exprData;
list = listData.getData();
if (list.size() == 1) {
data = ((BindData) list.get(0)).getValue();
if (data != null) {
obj = data.toString();
}
}
}
}
return obj;
}
public String name() {
return "json2";
}
}
@Configuration
public class UReport2Config {
@Bean
public Function ureportJsonFunctionExt() {
return new JsonFunctionExt();
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论