Flutter 如何在flatter中解析json

Flutter 如何在flatter中解析json,flutter,dart,Flutter,Dart,我正在尝试获取来自Http库的JSON数据。我只想向用户显示第一个对象的“alert_description”值。如何访问此属性 我的API响应: { "code": 0, "message": " success", "data": { "data": { "current_page": 1,

我正在尝试获取来自Http库的JSON数据。我只想向用户显示第一个对象的“alert_description”值。如何访问此属性

我的API响应:

{
    "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()。