You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中无法解析无引号格式JSON的技术求助

非标准无引号类JSON数据的解析方案

你之前的代码只支持标准JSON解析,但新数据源返回的是无字段名引号、无字符串值引号的类JSON格式,jsonDecode无法直接处理,得先把它转换成标准JSON格式再解析。

步骤1:编写格式转换函数

用正则表达式给字段名和字符串值补上双引号:

String convertToValidJson(String invalidJson) {
  // 给字段名加双引号:匹配类似 id: 的格式
  String withQuotedKeys = invalidJson.replaceAll(RegExp(r'(\w+):'), r'"$1":');
  // 给字符串值加双引号:匹配类似 : unicorn_id 的非数字、非符号值
  String validJson = withQuotedKeys.replaceAll(RegExp(r'(:\s*)([^",\]\}\d\s]+)'), r'$1"$2"');
  return validJson;
}

步骤2:修改原解析流程

先转换格式,再用原来的逻辑解析:

final response = await api(map);
// 注意新数据源是raw["data"],替换原代码里的raw["datalist"]
var raw = jsonDecode(response.body)[0];
// 先把非标准的data内容转成标准JSON字符串
String validDataStr = convertToValidJson(raw["data"].toString());
// 再用原parseJson解析
dataList = parseJson(validDataStr);

// 原parseJson函数可保留不变
List<dataRecord> parseJson(String responseBody) {
    final parsed = convert.jsonDecode(responseBody).cast<Map<String, dynamic>>();
    return parsed.map<dataRecord>((json) => dataRecord.fromJson(json)).toList();
}

注意事项

  • 如果数据源的字符串值包含特殊字符(比如空格、冒号),需要调整正则表达式的匹配规则;
  • 要确保新数据源的data字段结构和原datalist一致,否则dataRecord.fromJson需要适配新字段名。

内容的提问来源于stack exchange,提问作者Tony Lam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 01:45:02