Dart 将 HTML 转换为 JSON

Posted

技术标签:

【中文标题】Dart 将 HTML 转换为 JSON【英文标题】:Dart Convert HTML to JSON 【发布时间】:2022-01-17 20:03:00 【问题描述】:

土耳其官方词典有某种 json 请求系统,但它给出的响应是 html,而不是 JSON。

例子:

https://sozluk.gov.tr/gts?ara=kalem

我正在尝试将此 HTML 转换为 JSON,但无法成功。当我在 Flutter 上使用 html 插件时,它每次都会给我某种#document。

      var sozlukurl = await http.Client()
          .get(Uri.parse('https://sozluk.gov.tr/gts?ara=$ceviri'));
      print(sozlukurl);
      var sozlukapibody = parse(sozlukurl.body);
      print(sozlukapibody);
      var decoded = json.decode(sozlukapibody.toString());
      var sozlukbilgi = jsonDecode(utf8.decode(decoded.bodyBytes)) as Map;
      var sozlukanlam = sozlukbilgi['anlamlarListe'][0]['anlam'];
      print(sozlukanlam);

sozlukurl 的输出:

I/flutter ( 5350): Instance of 'Response'

sozlukapibody 的输出:

I/flutter ( 5350): #document

最终错误:

FormatException (FormatException: Unexpected character (at character 1)
#document
^
)

我该如何解决这个问题?

【问题讨论】:

所以你得到了 HTML 形式的响应? 【参考方案1】:

它返回一个带有封装它的数组的 json。对于您的特定示例,jsonDecode 应该可以正常工作,只需使用数组的索引 0 即可访问 json。

var res = await http.Client()
          .get(Uri.parse('https://sozluk.gov.tr/gts?ara=kalem'));
  
var body = res.body;
var decoded = jsonDecode(body);
var json = decoded[0];

var sozlukanlam = json["anlamlarListe"][0]["anlam"];
print(sozlukanlam);

我在 DartPad 上尝试过,但没有在实际应用上尝试过。

【讨论】:

它就像 DartPad 中的魅力一样。在实际的应用程序中,我遇到了一些不同的错误。 “错误代码”编辑:已修复,这只是错字。

以上是关于Dart 将 HTML 转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

将 json 结果转换为 dart 模型

如何将这个复杂的Json转换为Dart对象

无法将 yyyyMMddHHmmss 格式的字符串日期转换为 DateTime dart

无法在颤动中将json转换为listview

如何将使用graphQL的api响应转换为flutter中的Plain Old Dart Object?

Dart:尽管强制转换,但无法将 List<dynamic> 转换为 List<Map<String, dynamic>>