Dart 2中json.encode生成无引号键值的JSON字符串问题求助
解决Dart中json.encode生成无引号键的问题
嘿,我懂你碰到的这个麻烦——用json.encode()生成的JSON字符串里键居然不带引号,完全不符合标准JSON的格式对吧?别担心,这问题很好解决,我来给你捋清楚:
问题根源
你定义的resBody和user都是默认的无类型Map(也就是Map<dynamic, dynamic>),当json.encode()处理这种键类型为dynamic的Map时,没办法确保把键正确转换成带双引号的字符串。而标准JSON明确要求所有键必须是带双引号的字符串,所以我们得让Map的键类型明确为字符串才行。
两种修复方法
方法1:明确声明Map类型为<String, dynamic>
在定义Map的时候直接指定类型,让Dart清楚知道键是字符串类型:
import 'dart:convert'; void main() { Map<String, dynamic> resBody = {}; resBody["email"] = "employerA@gmail.com"; resBody["password"] = "admin123"; Map<String, dynamic> user = {}; user["user"] = resBody; String str = json.encode(user); print(str); // 输出:{"user":{"email":"employerA@gmail.com","password":"admin123"}} }
方法2:用字面量直接创建键为字符串的Map
这种方式更简洁,直接通过字面量创建符合要求的Map:
import 'dart:convert'; void main() { var user = { "user": { "email": "employerA@gmail.com", "password": "admin123" } }; String str = json.encode(user); print(str); // 同样输出标准格式的JSON字符串 }
运行上面任意一段代码,你就能得到你想要的标准JSON格式啦,所有键都会带上双引号。
内容的提问来源于stack exchange,提问作者MistyD
相关产品推荐
相关产品推荐

