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
相关产品推荐
相关产品推荐

