MIT APP Inventor安卓应用JSON数据读取异常问题求助
MIT App Inventor读取JSON对应年月数值异常问题解决
问题概述
使用MIT App Inventor开发Android应用,通过3个TextBox组件实现:前两个分别输入年份、月份,第三个显示JSON文件中对应年月的数值。导入JSON文件后,第三个TextBox显示两个过大数值,而非预期的单个真实数值。
目标JSON结构(已修正格式错误):
{ "2023": { "1": 50.430618018683106, "2": 51.181363951612525, "3": 51.93210988454197, "4": 52.68285581747139, "5": 53.43360175040084, "6": 54.18434768333026, "7": 54.93509361625971, "8": 55.685839549189126, "9": 56.43658548211857, "10": 57.18733141504799, "11": 57.93807734797744, "12": 58.68882328090686 } }
错误原因分析
你看到的"过大数值"大概率是JSON对象的内存引用标识(而非真实数值),核心问题是JSON解析时未正确嵌套提取层级数据,常见场景:
- 直接将年份对应的子对象赋值给TextBox3,而非提取该对象下的月份数值
- 解析时未将年份、月份输入转为与JSON键匹配的字符串类型
- JSON文件格式不完整(原JSON末尾缺少闭合
})
解决步骤
1. 修正JSON文件格式
确保JSON结构完整,补上末尾缺失的},避免解析失败。
2. 正确嵌套解析JSON数据
使用MIT App Inventor的内置JSON解析块(或JsonUtil组件),按层级提取:
- 第一步:读取DataFile中的JSON内容,解析为根JSON对象
- 第二步:从根对象中,以第一个TextBox的内容为键,提取对应年份的子对象
- 第三步:从年份子对象中,以第二个TextBox的内容为键,提取目标数值
- 第四步:将提取到的数值赋值给第三个TextBox
3. 关键逻辑块(可视化描述)
当 按钮.Click 执行 设置 jsonContent 为 DataFile1.ReadFromString() 设置 rootObj 为 解析 JSON(jsonContent) 设置 yearObj 为 获取 键值(rootObj, TextBox1.Text) 设置 targetValue 为 获取 键值(yearObj, TextBox2.Text) 设置 TextBox3.Text 为 targetValue
4. 额外排查点
- 检查前两个TextBox的输入是否有多余空格(如"2023 "而非"2023"),确保与JSON中的键完全匹配
- 若月份输入是数字类型,需转为字符串后再作为键提取(JSON中月份键是字符串格式)
- 确认DataFile组件已正确导入JSON文件,文件路径无错误
内容的提问来源于stack exchange,提问作者Miljan Jeremic
相关产品推荐
相关产品推荐

