这是我的代码,应该返回 json。我从这里改编了这段代码https://github.com/flutter/flutter/issues/15110
Stream _defaultReturn(HttpClientResponse httpClientResponse) {
Stream response = httpClientResponse.
transform(utf8.decoder).
transform(json.decoder).
asyncMap((json) => jsonDecode(json));
return response;
}
Future<dynamic> get(String endpoint) async {
HttpClientRequest httpClientRequest =
await httpClient.getUrl(Uri.parse(_url + endpoint));
_addCookies(httpClientRequest);
final HttpClientResponse httpClientResponse =
await httpClientRequest.close();
return _defaultReturn(httpClientResponse);
}
我已经设置了返回类型Stream
into _defaultReturn
因为智能感知告诉我那个巨大的东西给了我一个Stream
。我实际上想接收一个 json (应该是一个地图)。我想我可能会消费或订阅这个流来获得一些有用的东西。但是,我认为将 json 解析为流没有用处。解析之前我不需要整个json吗?我不应该简单地将所有内容积累成一个String
然后只需调用jsonDecode
?
从 http 调用返回 json 的最有效方法是什么?以及如何做呢?
json.decoder
将监听源流和always将其内容转换为just one Object
,所以你可以用流返回它.first
:
Future<Object> get(String endpoint) async {
var httpClientRequest = await httpClient.getUrl(Uri.parse(_url + endpoint));
_addCookies(httpClientRequest);
final httpClientResponse = await httpClientRequest.close();
return httpClientResponse
.transform(utf8.decoder)
.transform(json.decoder)
.first;
}
然后你可以像这样使用它:
var jsonObject = await myHttpClient.get(myEndpoint);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)