无法发布带有json正文的http请求,因为'dart:convert'包中的jsonEncode方法添加了转义字符

时间:2019-11-21 02:19:56

标签: json http flutter dart

我正在尝试使用带有JSON正文的http / http.dart包发出http发布请求。为此,我尝试使用jsonEncode(dart:convert包)将Map转换为JSON,但无法这样做,因为jsonEncode在转换过程中添加了转义字符,这使得JSON字符串成为用于发布的无效JSON。

Future postData(Map data) async {
Map<String, String> headers = {"Content-type": "application/json"};

var body = jsonEncode(data);

http.Response response = await http.post(url, headers: headers, body: body);

if (response.statusCode == 201) {
  print("Customer creared");
  } else {
  print(response.statusCode);
  }
}

当我调试上面的代码时,body的值如下:

body = {\"first_name\":\"Manish\",\"last_name\":\"Kumar\",\"phone_numebr\":\"9123456789\",\"seal\":\"manne\"}

所以在这里我可以看到一个额外的转义字符被添加到json字符串中,这使得很难用json正文进行http发布请求。

我尝试通过直接放置此字符串来发出http发布请求,效果很好。下面的代码:

http.Response response = await http.post(url, headers: headers, body: '{"first_name":"Manish","last_name":"Kumar","phone_numebr":"9123456789","seal":"manne"}');

有人可以帮我将Map转换为json而不使用转义符吗?

1 个答案:

答案 0 :(得分:0)

最后我得到了答案。

我创建了一个dataTest变量,如下所示:

final dataTest = {
  'first_name': firstName,
  'last_name': lastName,
  'seal': seal,
  'phone_number': phoneNumber
};

这里的名字,姓氏,印章和电话号码是字符串类型。

现在通话,

postData(dataTest);

Future postData(dynamic data) async {
Map<String, String> headers = {"Content-type": "application/json"};

http.Response response = await http
    .post(url, headers: headers, body: json.encode(data));

if (response.statusCode == 201) {
 print("Customer creared");
 } else {
 print(response.statusCode);
 }
}

所以这里的关键是对动态类型调用json.encode方法,然后将其传递给http.post的body参数。