Flutter 如何在flatter中解析json
我正在尝试获取来自Http库的JSON数据。我只想向用户显示第一个对象的“alert_description”值。如何访问此属性 我的API响应:Flutter 如何在flatter中解析json,flutter,dart,Flutter,Dart,我正在尝试获取来自Http库的JSON数据。我只想向用户显示第一个对象的“alert_description”值。如何访问此属性 我的API响应: { "code": 0, "message": " success", "data": { "data": { "current_page": 1,
{
"code": 0,
"message": " success",
"data": {
"data": {
"current_page": 1,
"data": [
{
"id": 62,
"user_id": 53,
"boxIdentifiant": 1924589682265245,
"boxName": "Box Sfax",
"alert_date": "2021-05-30",
"alert_time": "09:40",
"alert_description": "Panne Pression",
"alert_level": "warning"
},
{
"id": 61,
"user_id": 53,
"boxIdentifiant": 1924589682265243,
"boxName": "Box Tunis",
"alert_date": "2021-05-30",
"alert_time": "09:40",
"alert_description": "Panne Pression Roux",
"alert_level": "info"
},
{
"id": 58,
"user_id": 53,
"boxIdentifiant": 1924589682265244,
"boxName": "Box Office",
"alert_date": "2021-05-30",
"alert_time": "09:40",
"alert_description": "Panne Pression Roux",
"alert_level": "warning"
},
我的代码:
var response =
await http.get(Uri.parse(ApiUtil.GET_ALERT), headers: headers);
print("here================");
// print(response);
var data = json.decode(response.body);
print(data['data']['data']['data']);
if (data['status'] == 200) {
showNotification(data['message'], flp);
} else {
print("no message");
}
return Future.value(true);
});
}
我不知道Http库是如何工作的,但在Dio库中,您不需要对任何内容进行解码,这非常简单。看看这是否有助于您:
var response = await Dio().post(yourUrl, data: { param1: value1, param2: value2 });
for (var item in response.data['data']['data']['data'])
{
print(item['alert_description']);
}
由于您使用的是
GET
方法,请分别使用Dio().GET()
和queryParameters:
而不是Dio().post()
和数据:
。用于解码这样的JSON
{
"id":"xx888as88",
"timestamp":"2020-08-18 12:05:40",
"sensors":[
{
"name":"Gyroscope",
"values":[
{
"type":"X",
"value":-3.752716,
"unit":"r/s"
},
{
"type":"Y",
"value":1.369709,
"unit":"r/s"
},
{
"type":"Z",
"value":-13.085,
"unit":"r/s"
}
]
}
]
}
您可以这样做:
void setReceivedText(String text) {
Map<String, dynamic> jsonInput = jsonDecode(text);
_receivedText = 'ID: ' + jsonInput['id'] + '\n';
_receivedText += 'Date: ' +jsonInput['timestamp']+ '\n';
_receivedText += 'Device: ' +jsonInput['sensors'][0]['name'] + '\n';
_receivedText += 'Type: ' +jsonInput['sensors'][0]['values'][0]['type'] + '\n';
_receivedText += 'Value: ' +jsonInput['sensors'][0]['values'][0]['value'].toString() + '\n';
_receivedText += 'Type: ' +jsonInput['sensors'][0]['values'][1]['type'] + '\n';
_receivedText += 'Value: ' +jsonInput['sensors'][0]['values'][1]['value'].toString() + '\n';
_receivedText += 'Type: ' +jsonInput['sensors'][0]['values'][2]['type'] + '\n';
_receivedText += 'Value: ' +jsonInput['sensors'][0]['values'][2]['value'].toString();
_historyText = '\n' + _receivedText;
}
void setReceivedText(字符串文本){
Map jsonInput=jsonDecode(文本);
_receivedText='ID:'+jsonInput['ID']+'\n';
_receivedText+='Date:'+jsonInput['timestamp']+'\n';
_receivedText+='设备:'+jsonInput['sensors'][0]['name']+'\n';
_receivedText+='类型:'+jsonInput['sensors'][0]['values'][0]['Type']+'\n';
_receivedText+='值:'+jsonInput['sensors'][0]['values'][0]['Value'].toString()+'\n';
_receivedText+='类型:'+jsonInput['sensors'][0]['values'][1]['Type']+'\n';
_receivedText+='值:'+jsonInput['sensors'][0]['values'][1]['Value'].toString()+'\n';
_receivedText+='类型:'+jsonInput['sensors'][0]['values'][2]['Type']+'\n';
_receivedText+='值:'+jsonInput['sensors'][0]['values'][2]['Value'].toString();
_historyText='\n'+\u receivedText;
}
我只想向用户显示第一个值作为通知。这将显示列表中存在的所有值@LinesofcodeTry响应。数据['data']['data']['data']][0]请确保数组长度至少为1,以避免将来出现问题。遵循@AlperenBaskaya解决方案。如果(数据['status']==200){showNotification(数据[0]['alert_description'],flp);}其他{print(“无消息”);}。该值显示在控制台上。我想在屏幕上显示为通知。@linesofcode我强烈建议使用json.decode()。