Flutter Мне нужно напечатать простые данные, но я не знаю, в чем проблема, когда он показывает ноль, но имеет значение.
мой код
var url =
'http://api.igiinsurance.com.pk:8888/drive_api/location.php?imei=358480081983837';
print(url);
http.Response res = await http.get(
url,
headers: <String, String>{
'token': 'c66026133e80d4960f0a5b7d418a4d08'
},
);
var data = json.decode(res.body);
print(data);
if (data['status'].toString() == "success") {
print(data['location']);
}
если я запускаю API в почтальоне, это выглядит так
{
"origin": {
"id": "b733bc40-aafe-421d-8fed-4067bcdb5afc",
"name": "358480081983837"
},
"date": "2020-12-22T10:10:40.000Z",
"received": "2020-12-22T10:11:39.000Z",
"active": false,
"linked": [
{
"id": "73f0516a-76ff-4abb-bf78-7b2493b6c94a",
"name": "APL-Muhammad Saleem Ahmed",
"type": "asset"
}
],
"zones": [
{
"id": "8ea7dd50-b00d-4880-aaf2-3f924c1ae503",
"name": "Pakistan",
"type": "keepin"
},
{
"id": "bd90ec5b-2da8-4022-bca0-7a9e7603c2fc",
"name": "Karachi",
"type": "keepin"
},
{
"id": "4087d332-5277-48bc-a23e-400d2c15ea31",
"name": "Sindh",
"type": "keepin"
},
{
"id": "4ca687c6-9d25-47b5-8f2f-9117dab39cea",
"name": "Sindh Province",
"type": "keepin"
},
{
"id": "3c73b284-498d-4661-989b-ee6401708c85",
"name": " Karachi",
"type": "keepin"
},
{
"id": "b5c0d124-c1ba-495d-9c62-6bc766639731",
"name": "International Boundary",
"type": "keepin"
},
{
"id": "a0f7186a-42e5-4eec-b529-a933a5cdb0e1",
"name": "Pakistan",
"type": "keepin"
},
{
"id": "a9a4ec02-f0a0-40c7-8a00-c1cea582a9ca",
"name": "Sindh",
"type": "keepin"
},
{
"id": "e57df14d-191e-4c31-bd3c-78fa1ac2e2d7",
"name": "Karachi",
"type": "keepin"
}
],
"routes": [],
"state": {},
"spd": null,
"location": {
"lon": 67.036763,
"lat": 24.827595,
"speed": 0,
"altitude": 25,
"heading": 1,
"accuracy": 13,
"age": 0,
"gc": {
"rd": "Khayaban-e-Rumi",
"sb": "Clifton Block 9",
"tw": "Clifton",
"ct": "Pakistan"
},
"address": "Khayaban-e-Rumi, Clifton Block 9, Clifton, Pakistan"
},
"telemetry": {
"priority": 0,
"eventId": 0,
"ignition": 0,
"moving": 0,
"motion_end": 1,
"gsm_signal": 3,
"digital_01": 0,
"output_01": 0,
"power_voltage": 12.73,
"gps_speed": 0,
"gsm_cell": 10283,
"gsm_lac": 727,
"battery_voltage": 3.996,
"battery_current": 0,
"analog_01": 173,
"fuel_rate": 18.95,
"x": -0.02,
"eco_score": 10,
"gsm_code": 41004,
"odo_diff": 0,
"odometer": 20403.945,
"fuel_counter": 3839.767,
"movement": 0,
"hours_00_counter": 1177.310307,
"idle_counter": 0
},
"counters": {
"odometer": 20403.945,
"hours": 1177.310307
},
"io": {
"output_01": {
"type": "output",
"input": "output_01",
"name": "Immobilizer",
"value": 0,
"text": "Off",
"unit": ""
}
},
"meta": {
"dsid": "deviceserver2@b314b24a22c6",
"wshost": "dws.eu1.kt1.io",
"wsport": 80,
"ecsid": "69ebf0b0b87645318ec79d2cc883a5f3",
"tpsq": 0
},
"object": {
"id": "73f0516a-76ff-4abb-bf78-7b2493b6c94a",
"name": "APL-Muhammad Saleem Ahmed",
"type": "asset"
},
"lastMovement": "2020-12-22T04:20:08.000Z"
}
я просто хочу напечатать значения lon и lat. но не знаю, почему во флаттере отображается ноль.
вы можете видеть, что моя консоль показывает значение в lon, но ее сокращение не знаю почему. Я застрял в этом вопросе, и я знаю, что это очень важно для флаттера. Но может ли кто-нибудь помочь, как я могу напечатать только значение?
я уже пробовал несколько способов, как
print(data['location']['lon']);
но показывает ноль
@dm_tr слишком долго, поэтому я отредактировал и добавил весь json сейчас
Во-первых, глядя на json, не похоже, что есть ключ «статус», поэтому я не уверен, что происходит с этим оператором if. В любом случае, если вы хотите получить доступ к «lon», который вложен в объект json местоположения. может оказаться полезным следующее. var location = data['location'] as Map; print(location['lon']);
Попробуйте следующее:
final locationMap = Map<String,dynamic>.from(data['location']);
print(locationMap['lon']);
Проведя собственное расследование, я обнаружил, что фактическая структура ваших данных
{
"status": "success",
"data": {
"origin": {
// ...
},
"date": "2020-12-22T12:49:55.000Z",
"location": {
"lon": 67.036763,
"lat": 24.827595,
// ...
},
}
}
Итак, чтобы получить доступ к долготе местоположения, вам нужно сделать
print(data["data"]["location"]["lon"]);
Спасибо. теперь я чувствую себя ботом xD
То, что показывает
print(data);
, не похоже на json, который вы разместили здесь. Вывод в вашей консоли отличается от фактического json, который вы опубликовали