【发布时间】:2021-02-12 20:56:27
【问题描述】:
我有一个来自 API 的 json,
"nutrient_value": [
{
"Calcium": [
"29.16",
"mg",
"Red",
"0.00102858984",
"ounce"
]
},
{
"Choline": [
"118.97",
"mg",
"Red",
"0.00419654778",
"ounce"
]
},
{
"Copper": [
"0.12",
"mg",
"Red",
"0.00000423288",
"ounce"
]
},
{
"Crude fat": [
"29.16",
"g",
"Green",
"1.02858984",
"ounce"
]
},
{
"Folate": [
"11.66",
"mcg",
"Red",
"0.00000041129484",
"ounce"
]
},
{
"Iodine": [
"0.0",
"mcg",
"Red",
"0.0",
"ounce"
]
},
{
"Iron": [
"4.08",
"mg",
"Yellow",
"0.00014391792",
"ounce"
]
},
{
"Magnesium": [
"34.99",
"mg",
"Green",
"0.00123423726",
"ounce"
]
},
{
"Manganese": [
"0.02",
"mg",
"Red",
"0.00000070548",
"ounce"
]
},
{
"Niacin (B3)": [
"9.04",
"mg",
"Green",
"0.00031887696",
"ounce"
]
},
{
"Omega-3 excl. ALA and SDA": [
"0.02",
"g",
"Red",
"0.00070548",
"ounce"
]
},
{
"Omega-6": [
"0.02",
"g",
"Red",
"0.00070548",
"ounce"
]
},
{
"Pantothenic acid (B5)": [
"1.07",
"mg",
"Red",
"0.00003774318",
"ounce"
]
},
{
"Phosphorus": [
"332.42",
"mg",
"Red",
"0.01172578308",
"ounce"
]
},
{
"Potassium": [
"573.48",
"mg",
"Yellow",
"0.02022893352",
"ounce"
]
},
{
"Protein": [
"36.94",
"g",
"Green",
"1.30302156",
"ounce"
]
},
{
"Riboflavin (B2)": [
"0.29",
"mg",
"Red",
"0.00001022946",
"ounce"
]
},
{
"Selenium": [
"30.72",
"mcg",
"Red",
"0.00000108361728",
"ounce"
]
},
{
"Sodium (Na)": [
"128.3",
"mg",
"Green",
"0.0045256542",
"ounce"
]
},
{
"Thiamin (B1)": [
"0.08",
"mg",
"Red",
"0.00000282192",
"ounce"
]
},
{
"Vitamin A": [
"8.16",
"mcg",
"Red",
"0.00000028783584",
"ounce"
]
},
{
"Vitamin C": [
"0.0",
"mg",
"Green",
"0.0",
"ounce"
]
},
{
"Vitamin D": [
"0.19",
"mcg",
"Red",
"0.00000000670206",
"ounce"
]
},
{
"Vitamin E": [
"0.33",
"mg",
"Red",
"0.00001164042",
"ounce"
]
},
{
"Zinc (Zn)": [
"8.71",
"mg",
"Red",
"0.00030723654",
"ounce"
]
},
{
"Calories": [
"417.96",
"cal",
null,
"N/A",
"ounce"
]
},
{
"Omega-3/6 ratio": [
"0.65",
"ratio",
"Green",
"N/A",
"ounce"
]
},
{
"Calcium/Phosphorus ratio": [
"0.06",
"ratio",
"Red",
"N/A",
"ounce"
]
}
],
从上面的json我解码成这个
var resJson = json.decode(res);
MPD.Result _mealPlan = MPD.Result.fromJson(resJson["result"]);
///
factory Result.fromJson(Map<String, dynamic> json) => Result(
id: json["id"],
....
nutrientValue: List<NutrientValue>.from(json["nutrient_value"].map((x) => NutrientValue.fromJson(x))),
....
);
"nutrient_value": []
在这个 nutrition_value 数组中,对于每个项目,我需要检查给定键(例如:“钙”)是否存在,如果存在,则获取该键的索引 [0] 和 [2] 的值:
Example key "Calcium" exists and
valueCalcium = value of index[0]
colorCalcium = value of index[2]
"nutrient_value": [
{
"Calcium": [
"29.16",
"mg",
"Red",
"0.00102858984",
"ounce"
}
我怎样才能以迭代的方式做到这一点?
我试过了
_mealPlan.nutrientValue.forEach((element) {
if(element.calcium.isNotEmpty){
valCalcium = element.calcium[0];
print(valCalcium);//_mealPlan.nutrientValue[0].calcium[0];
calciumClr = element.calcium[2];
print(calciumClr);
}
});
但这似乎不是正确的方法。
我在后面的代码中使用了这两个索引值。
【问题讨论】:
-
您好,感谢您的评论。我设法通过解码将 nutrition_values 部分转换为可读格式。现在我手头有这份清单。如何在高于要求的单元中进行迭代?
-
如果你解析了所有内容并且你有一个
List的Maps 所以处理for (var i = 0; i < list.length; i++)循环中的每个元素 -
不知何故它不是一个列表,我这样做是通过解码``` resJson = json.decode(res); MPD.Result _mealPlan = MPD.Result.fromJson(resJson["result"]); ```