From 82a234a6b298f6ab0611ba8cb286750f92aaab1a Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Wed, 1 Jul 2026 10:09:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20JSON=E8=A7=A3=E6=9E=90=E6=8F=90=E5=8F=96?= =?UTF-8?q?extracted=E7=BB=9F=E4=B8=80=E8=B5=8B=E5=80=BC=EF=BC=8C=E7=AE=80?= =?UTF-8?q?=E5=8D=95=E5=80=BC=E5=85=9C=E5=BA=95=EF=BC=8C=E5=B5=8C=E5=A5=97?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E5=AE=89=E5=85=A8=E5=BA=8F=E5=88=97=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/par/core/adapter/AdapterEngine.java | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) 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(); } + } }