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

Flutter查询本地JSON指定值是否存在并获取对应新值问题

问题根因

你的代码有3个核心错误,导致无法正常匹配和取值:

  • 你提供的aa.json最外层是数组结构([]包裹),但代码中将jsonDecode的返回结果强制转换为Map类型,类型不匹配会直接触发运行时异常。
  • Map.containsValue()仅能检查当前Map直接存储的value,你的业务逻辑需要遍历数组内的每个对象,匹配old_value字段和扫描结果是否相等,直接对错误类型的对象调用该方法完全无法实现匹配逻辑。
  • Dart字符串插值语法错误:插值内容如果是下标取值、属性访问这类复杂表达式,必须用{}包裹,否则会出现语法解析错误,取不到正确值。
可直接运行的修正代码
import 'dart:convert';
import 'package:flutter/services.dart';

// 业务逻辑部分
final String response = await rootBundle.loadString('assets/json/aa.json');
// 按JSON实际结构转成List类型
final List<dynamic> valueList = jsonDecode(response) as List;

// 查找old_value匹配的项
final matchedEntry = valueList.firstWhere(
  (element) => element['old_value'] == scanResult,
  orElse: () => null,
);

if (matchedEntry != null) {
  print('has the value');
  print('The new value is: ${matchedEntry['new_value']}');
  // 此处可直接返回matchedEntry['new_value']供后续业务使用
} else {
  print('no value');
}
补充提示
  • 如果项目启用了空安全,建议为该JSON结构编写对应的实体类做序列化,避免动态类型带来的潜在隐患,上述轻量写法已经可以满足当前的匹配、取值需求。
  • 提前确认pubspec.yaml的assets配置中已经注册了assets/json/aa.json路径,否则会出现文件读取失败的问题。

内容的提问来源于stack exchange,提问作者Miguel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:39:29