【问题标题】:Flutter - Unexpected character when decoding jsonFlutter - 解码json时出现意外字符
【发布时间】:2019-10-17 08:19:47
【问题描述】:

解码 json 时出现意外字符 

E/flutter (27537): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: FormatException: Unexpected character (at character 1)
E/flutter (27537): {"data":[{"kode_wilayah":"056001  ","nama":"Kec. Karang Pilang","mst_kod...
E/flutter (27537): ^
E/flutter (27537):
E/flutter (27537): #0      _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1392:5)

这里是代码

Future<List<Kecamatan>> getData() async {
    List<Kecamatan> list;
    String link =
            "http://jendela.data.kemdikbud.go.id/api/index.php/CWilayah/wilayahGET/?mst_kode_wilayah=056000";
    var res = await http
        .get(Uri.encodeFull(link), headers: {"Accept": "application/json;charset=UTF-8", "Charset": "utf-8"});
    print(res.body);
        if (res.statusCode == 200) {
        var data = json.decode(res.body);
        var rest = data["data"] as List;
        print(rest);
        list = rest.map<Kecamatan>((json) => Kecamatan.fromJson(json)).toList();
        }
    print("List Size: ${list.length}");
    return list;
}

//inside build function
final kec = FutureBuilder<List<Kecamatan>>(
    future: getData(),
    builder: (BuildContext context,
        AsyncSnapshot<List<Kecamatan>> snapshot) {
    if (!snapshot.hasData) return CircularProgressIndicator();
    return DropdownButton<Kecamatan>(
        items: snapshot.data
            .map((camat) => DropdownMenuItem<Kecamatan>(
                child: Text(camat.nama),
                value: camat,
                ))
            .toList(),
        onChanged: (Kecamatan value) {
        setState(() {
            _selectedKec = value;
        });
        },
        isExpanded: false,
        //value: _currentCamat,
        hint: Text('Pilih Kecamatan'),
    );
});

有人知道如何删除这些字符吗?或者您可以告诉我另一种基于 json 创建下拉菜单的方法?

【问题讨论】:

    标签: json flutter


    【解决方案1】:

    你可以这样做:

      if (res.statusCode == 200) {
        // <============
        final prefix = '';
        var body = res.body;
        if (body.startsWith(prefix)) {
          body = body.substring(prefix.length);
        }
        // ============>
    
        var data = json.decode(body);
        var rest = data["data"] as List;
      }
    

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 2020-07-22
      • 2014-10-14
      • 2023-02-08
      • 2018-09-13
      • 2016-11-14
      • 2022-11-05
      • 2017-05-21
      相关资源
      最近更新 更多