Flutter循环内更新Json转Map的值不生效,疑为Bug
jsonDecode解析后的Map修改后值自动回滚问题
从REST API获取JSON数据后,通过jsonDecode生成List<Map<String,dynamic>>类型变量。在for循环内执行map['key'] = anyValue操作时,循环内打印显示值已修改,但循环结束后值又回滚至初始状态。我认为这是Flutter的Bug。
代码示例
"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]; // 赋值新的int值 print(data['some']['needToChange']); // 当前显示已修改,但作用域结束后会回滚 } print(data['some']['needToChange']); // 结果还是初始值1,没有变化
完整代码
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']); // 完全没变化!! }
对应的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 } ]
内容的提问来源于stack exchange,提问作者dontknowhy
相关产品推荐
相关产品推荐

