You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:10:30