Flutter开发报错:String无法转为index所需int类型求解决
解决Flutter中TypeError: String不是int类型的索引问题
咱们先把问题根源揪出来:你看你提供的JSON里,body字段是空数组[],但你的代码里却直接写了jsonData['body']['und']——数组只能用数字索引(比如[0]),你用字符串'und'当索引,这肯定会触发那个类型错误啊!而且你的判断条件jsonData['body']['und'][0]['value'] == 0也完全走不通,因为body是空数组,根本没有und这个属性,更别说后面的value了。
正确的逻辑应该是这样的:
- 先判断
body是否为空数组,或者是否没有有效内容 - 如果body为空/无效,就加载
field_body的数据;否则用body的数据
修正后的代码:
var data = await http.get(url); var jsonData = json.decode(utf8.decode(data.bodyBytes)); // 先处理内容的有效性判断 String content; var body = jsonData['body']; // 检查body是不是非空数组,且包含有效und元素 if (body is List && body.isNotEmpty && body[0] != null && body[0]['und'] != null && body[0]['und'].isNotEmpty) { var bodyValue = body[0]['und'][0]['value']; // 可以额外判断内容是否为空字符串,按需调整 content = bodyValue.isNotEmpty ? bodyValue : jsonData['field_body']['und'][0]['value']; } else { // body为空或无效,直接取field_body的数据 content = jsonData['field_body']['und'][0]['value']; } return DetailData( jsonData['title'], content, jsonData['field_image_wp']['und'][0]['filename'], jsonData['name'] );
额外小提醒:
- 最好给每个字段的访问加上空安全判断,比如
jsonData['field_body']?['und']?[0]?['value'] ?? '',避免因为某个字段缺失导致崩溃 - 你的原始JSON里
field_body.und[0].value的HTML标签<p>没闭合,如果是实际数据的问题,记得处理一下,避免显示异常
内容的提问来源于stack exchange,提问作者Mahant
相关产品推荐
相关产品推荐

