diff --git a/par-core/src/main/java/com/par/core/adapter/AdapterEngine.java b/par-core/src/main/java/com/par/core/adapter/AdapterEngine.java index b333c9d..ba5c758 100644 --- a/par-core/src/main/java/com/par/core/adapter/AdapterEngine.java +++ b/par-core/src/main/java/com/par/core/adapter/AdapterEngine.java @@ -48,26 +48,24 @@ public class AdapterEngine { result.put("matched", true); result.put("pageName", "JSON响应"); + List> rows = new ArrayList<>(); + if (parsed instanceof Map) { @SuppressWarnings("unchecked") Map map = (Map) parsed; result.put("message", "JSON 对象,共 " + map.size() + " 个顶层字段"); - // 展示顶层字段 - List> rows = new ArrayList<>(); Map row = new LinkedHashMap<>(); for (String key : map.keySet()) { Object val = map.get(key); - row.put(key, val instanceof String ? val : objectMapper.writeValueAsString(val)); + row.put(key, toDisplayString(val)); } rows.add(row); - result.put("extracted", rows); result.put("rowCount", 1); result.put("fieldCount", map.size()); } else if (parsed instanceof List) { @SuppressWarnings("unchecked") List list = (List) parsed; result.put("message", "JSON 数组,共 " + list.size() + " 条记录"); - List> rows = new ArrayList<>(); int max = Math.min(list.size(), 20); for (int i = 0; i < max; i++) { Object item = list.get(i); @@ -76,18 +74,26 @@ public class AdapterEngine { @SuppressWarnings("unchecked") Map m = (Map) item; for (String key : m.keySet()) { - Object val = m.get(key); - row.put(key, val instanceof String ? val : objectMapper.writeValueAsString(val)); + row.put(key, toDisplayString(m.get(key))); } } else { row.put("value", item); } rows.add(row); } - result.put("extracted", rows); result.put("rowCount", list.size()); result.put("fieldCount", rows.isEmpty() ? 0 : rows.get(0).size()); + } else { + // 简单值(string/number/boolean/null) + result.put("message", "JSON 简单值"); + Map row = new LinkedHashMap<>(); + row.put("value", parsed); + rows.add(row); + result.put("rowCount", 1); + result.put("fieldCount", 1); } + + result.put("extracted", rows); } catch (Exception e) { result.put("contentType", "json"); result.put("matched", false); @@ -282,4 +288,12 @@ public class AdapterEngine { if (s.equals("false") || s.equals("no") || s.equals("0") || s.equals("否")) return false; return null; } + + /** 值转展示字符串(嵌套对象序列化,null → "null") */ + private String toDisplayString(Object val) { + if (val == null) return "null"; + if (val instanceof String s) return s; + if (val instanceof Number || val instanceof Boolean) return val.toString(); + try { return objectMapper.writeValueAsString(val); } catch (Exception e) { return val.toString(); } + } }