gpt4 book ai didi

json - 如何从 Dart http 调用中返回 json/如何完全使用流?

转载 作者:行者123 更新时间:2023-12-03 02:41:01 27 4
gpt4 key购买 nike

这是我应该返回 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 的返回类型进入 _defaultReturn因为智能感知告诉我巨大的东西给了我一个 Stream .我实际上想收到一个 json (应该是一张 map )。我想我可能会消费或订阅这个流以获得有用的东西。但是,我不认为解析 json 作为流有用。在解析之前我不需要整个json吗?我不应该简单地将所有内容累积到 String 中吗?然后只需调用 jsonDecode ?

从 http 调用返回 json 的最有效方法是什么?怎么做?

最佳答案

json.decoder将监听源流并始终将其内容转换为一个 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);

关于json - 如何从 Dart http 调用中返回 json/如何完全使用流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60220679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com