Flutter和Json检索标题值为

时间:2018-09-24 09:45:40

标签: json dart flutter

我有一个来自wordpress的Json数组。它检索帖子。 每个帖子都有一系列的custom_options。

这里是一个例子:

{
  "options":{
    "wpcf-fields-select-option-f1d645c9017cce89714ede343df0cc73-1":{
      "title":"-Select-",
      "value":""
    },
    "wpcf-fields-select-option-3e64c784ce30a384e5167d1d6c1feb4e-1":{
      "title":"1\/5",
      "value":"S14"
    },
    "wpcf-fields-select-option-48334e061de93e6c47cc42c0fb5cd180-1":{
      "title":"1\/8",
      "value":"S1"
    },
    "wpcf-fields-select-option-a061ee2d2d302c5f42b2c93f9e811cdc-1":{
      "title":"1\/12",
      "value":"S2"
    }
  }
}

我想做的是调用一个函数,该函数将返回给定值的标题。

已经尝试使用

// infoList is the json object
// resultVal is the value I am searching for
String getarrayinfos (infoList, resultVal) {
    var result;
    Map thisList = infoList;

    for(var eachArr in thisList.keys){
      if(thisList[eachArr]["value"] == resultVal){
        result = thisList[eachArr]["title"];
      }
    }

    return result.toString();
}

并将其作为容器的子项打印

// options is the json Object
// S7 is the value I am searching for 
child: Text(getarrayinfos(options, "S7")),

但它会显示以下错误

flutter: type 'String' is not a subtype of type 'int' of 'index'

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

与其查看infoList.keys,不如查看infoList.values

String getArrayInfo(Map theMap, String searchText) {
  for (var val in theMap['options'].values) {
    if (val['value'] == searchText) return (val['title']);
  }
  return 'not found';
}

void main() {
  Map myMap = {
    "options": {
      "wpcf-fields-select-option-f1d645c9017cce89714ede343df0cc73-1": {
        "title": "-Select-",
        "value": ""
      },
      "wpcf-fields-select-option-3e64c784ce30a384e5167d1d6c1feb4e-1": {
        "title": "1\/5",
        "value": "S14"
      },
      "wpcf-fields-select-option-48334e061de93e6c47cc42c0fb5cd180-1": {
        "title": "1\/8",
        "value": "S1"
      },
      "wpcf-fields-select-option-a061ee2d2d302c5f42b2c93f9e811cdc-1": {
        "title": "1\/12",
        "value": "S2"
      }
    }
  };

  print(getArrayInfo(myMap, "S14"));
}

答案 1 :(得分:0)

另一种方法是使用数据模型。
这种方式是类型安全的方法。

toString

数据模型(由工具生成)。

toString