我需要使用包含数组的 JSON 创建发布请求。 http.post
方法只接受 Map<String, String>
.因此,我无法传递 <String,dynamic>
类型的 map 。因为 map 将包含一个列表。这是我的显式 HttpClientRequest
代码:
String jsonString = json.encode(body); // encode map to json
List<int> bodyBytes = utf8.encode(jsonString); // utf8 encode
HttpClient client = new HttpClient();
HttpClientRequest request = await client.postUrl(uri);
// it's polite to send the body length to the server
request.headers.set('Content-Length', bodyBytes.length.toString());
request.headers.set('Authorization', '...');
request.headers.set('X-Authorization', apiKey);
request.headers.set("Accept", "application/json");
request.headers.set('Content-Type', 'form-data');
request.add(bodyBytes);
HttpClientResponse response = await request.close();
response.transform(utf8.decoder).listen((contents) {
// handle data
return jsonDecode(contents);
});
问题是,上面的请求失败了。
编辑:
创建的json是:
{
"subject":"PLEASE",
"message":"JUST. WORK.",
"filter":"[8]",
}
但是服务器期望的 JSON 是:
{
"subject":"PLEASE",
"message":"JUST. WORK.",
"filter":[8],
}
我主要关心的是如何创建一个 JSON 数组...
最佳答案
发现问题。有两个主要问题:
- 我在将
List
添加到Map
时将其转换为 JSON 字符串。仅将List
直接添加到Map
之后,它似乎生成了正确的 JSON。 - 请求头中的content-type必须设置为application/json。
感谢@Edman 添加一些方向。
关于http - 使用 JSON 数组的 Flutter POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50736752/