我应该如何解码此json响应?

时间:2019-04-28 19:14:39

标签: android json api dart flutter

我想在flutter应用中解码服务器响应,所以这是我从服务器获得的json响应:

"{'UserId':'1','UserName':'sorena','Name':'behzad'}"

这是颤动的代码:


class HomeState extends State<Home>{
  Map user;

  @override
  void initState() {
    super.initState();
    getUser();
  }

  getUser() async {
    var response = await http.get('http://samplename.com/user/1');
    user = json.decode(response.body);
    print(user['UserId']);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child : Text('hi')
      )
    );
  }
}

当我只想在getUser()中打印UserId时,出现此错误: (基本上,我应该能够做到,对吗?因为我在另一个json响应中使用了它,所以没有问题)

E/flutter (28417): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: type 'String' is not a subtype of type 'Map<dynamic, dynamic>

我使用https://jsonformatter.curiousconcept.com来验证json响应,当我在问题中输入json响应时,它通过RFC 7159标准测试,但RFC 4627测试失败。

再一次,我在https://jsonformatter.curiousconcept.com中使用https://jsonplaceholder.typicode.com作为json响应示例,两个测试均通过,并且json响应按我的应用程序预期的那样工作。它给你任何线索吗?

那我为什么不能解码此响应?在此先感谢:)

4 个答案:

答案 0 :(得分:0)

请尝试以下操作:

var user = json.decode(response.body) as Map<String, dynamic>;
print(user['userId']);

更完整的解决方案是使用json serializable

答案 1 :(得分:0)

您是否尝试导入dart:转换并使用jsonDecode()

https://flutter.dev/docs/development/data-and-backend/json

此外,json键的格式规范要求双引号。

  String body='{"UserId":"1","UserName":"sorena","Name":"behzad"}';
  var user=(json.decode(body));
  print(user['UserId']);

这些值不需要用双引号引起来,因此,如果它们不在文字字符串中,则可以将其保留。

答案 2 :(得分:0)

您需要指定json映射类型

Map<String,dynamic> result = Map<String,dynamic>.from(json.decode(body.data));

print(result);

答案 3 :(得分:0)

谢谢大家, 最后,我告诉后端人员更改响应(删除前导和尾随双引号,并对字符串使用双引号)。