我想在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响应按我的应用程序预期的那样工作。它给你任何线索吗?
那我为什么不能解码此响应?在此先感谢:)
答案 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)
谢谢大家, 最后,我告诉后端人员更改响应(删除前导和尾随双引号,并对字符串使用双引号)。