fix: JSON解析提取extracted统一赋值,简单值兜底,嵌套对象安全序列化
This commit is contained in:
@@ -48,26 +48,24 @@ public class AdapterEngine {
|
||||
result.put("matched", true);
|
||||
result.put("pageName", "JSON响应");
|
||||
|
||||
List<Map<String, Object>> rows = new ArrayList<>();
|
||||
|
||||
if (parsed instanceof Map) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> map = (Map<String, Object>) parsed;
|
||||
result.put("message", "JSON 对象,共 " + map.size() + " 个顶层字段");
|
||||
// 展示顶层字段
|
||||
List<Map<String, Object>> rows = new ArrayList<>();
|
||||
Map<String, Object> 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<Object> list = (List<Object>) parsed;
|
||||
result.put("message", "JSON 数组,共 " + list.size() + " 条记录");
|
||||
List<Map<String, Object>> 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<String, Object> m = (Map<String, Object>) 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<String, Object> 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(); }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user