1

我正在使用 Flutter 为 Android 和 iOS 构建一个图书应用程序。我正在使用 Google Books API 来检索图书数据,但我注意到一些我不理解的奇怪东西。如果我们查看 chrome 浏览器 ( https://www.googleapis.com/books/v1/volumes/b3GuDwAAQBAJ ) 中显示的图书数据,我们可以看到内容(例如字段类别)与我得到的不同调用http响应并打印出它的正文。除此之外,似乎还没有发送unicode 字符(例如来自description )。

浏览器上显示的数据

获取到的Response body

我用来获取 API 数据的代码如下所示:

Response result = await http.get(Uri.parse(url), headers: {'content-type': 'application/json; charset=utf-8'});
if (result.statusCode == 200) {
  final jsonResponse = jsonDecode(utf8.decode(result.bodyBytes));
  if (jsonResponse["totalItems"] == 0) {
    return List.empty();
  }

  //this prints out the content in above image
  print(result.body.toString());

  final booksMap = jsonResponse['items'];
  List<dynamic> books = booksMap.map((i) => Book.fromJson(i)).toList();
  return books;
4

2 回答 2

0

似乎https://www.googleapis.com/books/v1/volumes/b3GuDwAAQBAJ提供的数据与您通常的搜索查询不同(例如https://www.googleapis.com/books/v1/volumes?q=isbn :9780143123231)。我不知道为什么。

于 2022-02-19T18:23:30.457 回答
0

由于存在 unicode,您可以看到原始形式的 API 响应

来自浏览器的原始表单图像

但是当你得到 api 响应时,你可以解析成 json,通过解析 json 删除 unicodes 并且数据格式正确

如果您json Formatter在 chrome 中使用扩展程序,您可以看到 Json 形式的 chrome 中的数据和当您通过代码点击 api 时来自 api 的响应是相同的。

浏览器中 Json 表单中的数据

在应用程序代码中,您设置 headers: {'content-type': 'application/json;这就是您收到 Json 数据代码的原因。这不是问题,因为您将在您的应用程序中使用这些数据,

您可以在此处查看更多内容类型

块引用

于 2022-02-19T18:24:03.320 回答