如何使用Dart将无引号JSON转换为合法可使用的JSON?
将非标准JSON转为Dart可用合法JSON的最优方法
你从可信第三方获取的非标准JSON内容如下:
{id: 2, name: Test Testerson, course_progress: 0, last_activity_date: null}, {id: 3, name: Poghos Adamyan, course_progress: 0, last_activity_date: null}
针对这种键未加双引号、多对象未包裹为数组的非标准格式,结合Dart特性,最优处理方法如下:
处理步骤
- 第一步:将多个独立对象包裹为JSON数组,在内容首尾分别添加
[和] - 第二步:用正则表达式为所有键添加双引号,匹配模式为
(\w+):,替换为"$1": - 第三步:使用Dart内置的
jsonDecode方法解析处理后的合法JSON
完整Dart代码示例
import 'dart:convert'; void main() { // 原始非标准JSON字符串 final rawNonStandardJson = '{id: 2, name: Test Testerson, course_progress: 0, last_activity_date: null}, {id: 3, name: Poghos Adamyan, course_progress: 0, last_activity_date: null}'; // 包裹为数组 final wrappedAsArray = '[$rawNonStandardJson]'; // 为键添加双引号 final regex = RegExp(r'(\w+):'); final validJson = wrappedAsArray.replaceAll(regex, r'"$1":'); // 解析JSON final parsedData = jsonDecode(validJson); // 打印验证结果 print(parsedData); }
说明
因为第三方是可信来源,我们可以假设所有键都是由字母、数字、下划线组成的标识符,所以正则(\w+):可以准确匹配所有键。如果后续遇到含特殊字符的键,可以调整正则模式(比如([^:,]+):),但当前场景下上述方法足够高效简洁。
内容的提问来源于stack exchange,提问作者gmasterfunkdawg
相关产品推荐
相关产品推荐

