【问题标题】:Flutter, json -> map update value is not able in for statement, bugFlutter, json -> map update value is not able in for statement, bug
【发布时间】:2022-11-20 23:31:11
【问题描述】:

收到 json 对象后,(来自 REST api)

jsonDecode 创建一个 List<Map<String,dynamic>> 变量,

在 for 语句中,做 map['key'] = anyValue;试试看。

我想我发现了一个 flutter 错误。

 "data": [
          {
            "id": 1,
            "title": "",
            "price": null,
            "some": [
                      {
                        "needToChange": 1 (int)
                       }
                     ],
            }
         ]

List<dynamic> data = jsonDecode(res.body)['data'];
for(int i = 0 ; i < 10 ; i++){
  data['some']['needToChange'] = someArray[i]; // new int value
  print(data['some']['needToChange']); // it is changed for now but it rolls back when scope is dead
}


print(data['some']['needToChange']) // it results 1 nothing changed

完整代码

 dynamic res = await http.post(
        Uri.parse(C_URL_BASE + '/v1/post-query/abc'),
        headers: {
          "Content-Type": "application/json",
          "Accept": "application/json",
        },
        body: body);
    
    Map<String, dynamic> jsonData = json.decode(res.body);
    List<dynamic> myList = [];
    for (int i = 0; i < jsonData['data']['someA'].length; i++) {
      for (int k = 0; k < jsonData['data']['someB'].length; k++) {
        if (jsonData['data']['someA'][i]['nestedA'] ==
            jsonData['data']['someB'][k]['nestedB']) {
          var map = jsonData['data']['someB'][k];
          print(jsonData['data']['someA'][i]['id']);
          map.update('needToChange',
                  (value) => jsonData['data']['someA'][i]['id']);
          myList.add(map);
        }
      }
    }

    print("it begins " + myList.length.toString());
    for (int i = 0; i < myList.length; i++) {
      print(myList[i]['needToChange']); //nothing changed!!
    }

json数据

"someA": [
          {
            "nestedA": 2,
            "id": 5
          },
          {
            "nestedA": 1,
            "id": 2
          },
          {
            "nestedA": 2,
            "id": 4
          },
          {
            "nestedA": 1,
            "id": 3
          },
          {
            "nestedA": 1,
            "id": 1
          }
        ],
        "someB": [
          {
            "id": 1,
            "needToChange": 111,
           },],]

我添加了更多,我确定它们在列表中,请查看

这就是我所有的

我确定这是一个 Flutter 错误

【问题讨论】:

  • 您可以添加示例 sn-p 代码以便我们运行测试吗?
  • 你想获得价值吗?
  • @YeasinSheikh 是的,我需要从服务器更改嵌套 Json 对象内的 int 数据,并且还需要获取列表。我需要使用 for 语句
  • 从服务器,是服务器端代码还是用户端?
  • @YeasinSheikh 客户端(Flutter)

标签: flutter dart


【解决方案1】:

datasome 列在此处。您需要提供索引才能访问该元素。你可以遵循这个结构。

final someArray = List.generate(10, (index) => index);
for (int i = 0; i < 10; i++) {
   data[i]['some'][0]['needToChange'] = someArray[i];
   print(data[i]['some'][0]['needToChange']);
}

【讨论】:

  • 嗯..我觉得和点数有点不一样
  • 是的改变价值
  • 已更新,您缺少索引
  • 对不起,恐怕没有,我上传了完整的代码,请检查一下
  • 你从print("it begins " + myList.length.toString());得到了什么?
猜你喜欢
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多