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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:15:37