You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter调用维基百科API时如何从键为动态pageid的JSON中提取值

Flutter解析动态键JSON数据解决方案

核心修改点

  • 修正维基API请求方式:当前你使用POST请求传空body访问维基API,该接口仅需GET请求即可正常返回数据,优先修改请求调用逻辑。
  • 动态pageid解析逻辑:query.pages返回的是键为动态pageid的Map结构,无需提前知道键名,直接取Map的values集合的首个元素即可获取页面对象,再读取description字段即可。

完整修改后代码片段

var transurl = Uri.parse(
        'https://translation.googleapis.com/language/translate/v2?key=AIzaSyCZ**YCKlw');
var response = await http.post(transurl,
    body: {'q': sonuc, 'source': 'en', 'target': 'tr', 'format': 'text'});
if (response.statusCode == 200) {
  var harita = jsonDecode(utf8.decode(response.bodyBytes)) as Map;
  var ceviri = harita['data']['translations'].last['translatedText'];
  print(ceviri);
  var wikiurl = Uri.parse(
      'https://tr.wikipedia.org/w/api.php?action=query&prop=description&format=json&titles=$ceviri');
  // POST改为GET,删除多余的空body参数
  var wikii = await http.get(wikiurl);
  // 打印返回体方便调试
  print(wikii.body);
  var wikibilgi = jsonDecode(utf8.decode(wikii.bodyBytes)) as Map;
  var pagesMap = wikibilgi['query']['pages'] as Map;
  // 预设默认值,兼容无数据场景
  String wikiii = "暂无对应词条描述";
  // 非空判断避免异常崩溃
  if (pagesMap.isNotEmpty) {
    var pageData = pagesMap.values.first;
    wikiii = pageData['description'] ?? wikiii;
  }
  print(wikiii);
  Navigator.push(
      context,
      MaterialPageRoute(
          builder: (context) =>
              BilgiEkrani(sonuc: sonuc, oran: oran, wikibilgi: wikiii)));
} else {
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(
      content: Text("GOOGLE TRANSLATE API HATASI"),
      duration: const Duration(seconds: 2)));
}

如果查询的词条不存在,pages下会返回带missing字段的对象,你可以根据业务需求再加额外判断逻辑处理该场景。

内容的提问来源于stack exchange,提问作者CidQu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:24:06