我应该如何解码这个json响应?

问题描述 投票:0回答:4

我想在我的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响应在我的应用程序中按预期工作。它能给你任何线索吗?

那为什么我不能解码这个回复呢?提前致谢 :)

android json api dart flutter
4个回答
0
投票

尝试如下:

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

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


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']);

这些值不需要双引号,因此如果它们不在文字字符串中,您可以将它们单独保留。


0
投票

您需要指定json映射类型

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

print(result);

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.