Google 书籍 API 返回的内容与浏览器 (Flutter) 上显示的不一样

Google Books API not returning the same as displayed on browser (Flutter)

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

我用来获取 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;

好像是https://www.googleapis.com/books/v1/volumes/b3GuDwAAQBAJ gives different data than your usual search query (eg. https://www.googleapis.com/books/v1/volumes?q=isbn:9780143123231)。我不知道为什么。

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

Raw Form image from browser

但是当您收到 api 响应时,您可以解析为 json,通过解析 json,unicode 被删除并且数据格式正确

如果您在 chrome 中使用 json Formatter 扩展,您可以看到 chrome 中的数据以 Json 形式显示,以及 api 的响应按代码点击 api 是相同的。

Data in Json Form in Browser

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

您可以看到更多内容类型here

Blockquote