【问题标题】:Flutter: parsing json response that has multiple keysFlutter:解析具有多个键的json响应
【发布时间】:2021-09-19 20:14:15
【问题描述】:

我正在尝试从这个 json 响应中获取这些键的值:

{
    "pro": {
        "groups": [
            "1": {
                "name": "Base",
                "fields": [
                    {
                        "id": 3,
                        "value": {
                            "raw": "Name",
                        }
                    },
                    {
                        "id": 4,
                        "value": {
                            "raw": "avatar",
                        }
                    },
                ]
            },
            "2": {
                "name": "Base",
                "fields": [
                    {
                        "id": 6,
                        "value": {
                            "raw": "Name",
                        }
                    },
                    {
                        "id": 7,
                        "value": {
                            "raw": "avatar",
                        }
                    },
                ]
            }
    ]
}
}        
        

我可以得到值 "name": "Base"

json['pro']['groups']["1"]['name'],

但我无法获取键“raw”的值。

如何获取键“raw”的值?

【问题讨论】:

    标签: json flutter dart


    【解决方案1】:

    fields 的值是一个列表,所以你会得到一个raw 值的列表:

    List<String> raw = json['pro']['groups']['1']['fields'].map((v) => v['value']['raw'];
    

    另外,groups 似乎是一个数组,但作为一个对象?那么你可以这样做:

    List<String> raw = [];
    Map<String, dynamic> groups = json['pro']['groups'];
    for (var key in groups.keys) {
      raw.add(groups[key]['fields'].map((v) => v['value']['raw']);
    }
    

    List<String> raw = groups.keys.map((key) => groups[key]['fields'].map((v) => v['value']['raw']);
    

    我还没有测试过代码,但希望它能按预期工作:)

    【讨论】:

      【解决方案2】:

      第一件事。你的 json 无效。 尝试paste your json here 它会显示为什么你的 json 无效

      修复 json 后,新结构 json 将如下所示

      {
        "pro": {
          "groups": [
            {
              "name": "Base",
              "fields": [
                {
                  "id": 3,
                  "value": {
                    "raw": "Name",
                  }
                },
                {
                  "id": 4,
                  "value": {
                    "raw": "avatar",
                  }
                },
              ]
            },
            {
              "name": "Base",
              "fields": [
                {
                  "id": 6,
                  "value": {
                    "raw": "Name",
                  }
                },
                {
                  "id": 7,
                  "value": {
                    "raw": "avatar",
                  }
                },
              ]
            }
          ]
        }
      }
      

      然后为了获取raw的值,你必须先使用jsonDecode()解析json,然后你可以使用这样的东西:

      Map<String, dynamic> groupOne = json['pro']['groups'][0];
      Map<String, dynamic> groupOneFieldOne = groupOne['fields'][0];
      print(groupOneFieldOne['value']['raw']);
      

      但这只是一个例子。如果您想轻松访问它们,可以像这样使用 .map():

        List<Map<String, dynamic>> groups = json['pro']['groups'];
        groups.map(
          (Map<String, dynamic> group) => (group['fields'] as List<dynamic>).map(
            (dynamic field) => field['value']['raw'],
          ),
        );
      

      就是这样!如果您想问任何问题,请发表评论;) 您可以在 dartpad 上复制和粘贴

        List<Map<String, dynamic>> groups = json['pro']['groups'];
        print(groups.map(
          (Map<String, dynamic> group) => (group['fields'] as List<dynamic>).map(
            (dynamic field) => field['value']['raw'],
          ),
        ));
      }
      
      Map<String, dynamic> json = {
        "pro": {
          "groups": [
            {
              "name": "Base",
              "fields": [
                {
                  "id": 3,
                  "value": {
                    "raw": "Name",
                  }
                },
                {
                  "id": 4,
                  "value": {
                    "raw": "avatar",
                  }
                },
              ]
            },
            {
              "name": "Base",
              "fields": [
                {
                  "id": 6,
                  "value": {
                    "raw": "Name",
                  }
                },
                {
                  "id": 7,
                  "value": {
                    "raw": "avatar",
                  }
                },
              ]
            }
          ]
        }
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-03
        • 1970-01-01
        • 2017-04-03
        • 2015-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多