我正在尝试使用带有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而不使用转义符吗?
答案 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参数。