robustJSON 尽力把一段"看起来像 JSON"的字符串解析成 map[string]any。 依次尝试:反斜杠修复 → 完整解析 → 截取到第一个完整花括号后解析。
(s string)
| 224 | // robustJSON 尽力把一段"看起来像 JSON"的字符串解析成 map[string]any。 |
| 225 | // 依次尝试:反斜杠修复 → 完整解析 → 截取到第一个完整花括号后解析。 |
| 226 | func robustJSON(s string) (map[string]any, bool) { |
| 227 | if s == "" { |
| 228 | return nil, false |
| 229 | } |
| 230 | repaired := fixLoneBackslashes(s) |
| 231 | if v, err := parseObject(repaired); err == nil { |
| 232 | return v, true |
| 233 | } |
| 234 | // 兜底:截到第一个完整 {} 区间 |
| 235 | if end := firstBalancedObject(repaired); end > 0 { |
| 236 | if v, err := parseObject(repaired[:end+1]); err == nil { |
| 237 | return v, true |
| 238 | } |
| 239 | } |
| 240 | return nil, false |
| 241 | } |
| 242 | |
| 243 | func parseObject(s string) (map[string]any, error) { |
| 244 | var v map[string]any |