Flutter调用OpenFoodFacts API提取商品名称(JSON数据)遇阻
解决Flutter中提取OpenFoodFacts API商品名称的问题
核心要点
OpenFoodFacts的v2 API返回的JSON结构是对象嵌套,而非数组,所以不能用数组索引[1]来取值。商品名称直接位于顶层的product对象下,基础字段是product_name;多语言场景可使用product_name_xx格式的字段,比如product_name_en对应英文名称。
Flutter代码示例
- 先在
pubspec.yaml中添加http包依赖:
dependencies: http: ^1.1.0
- 请求并提取商品名称的实现代码:
import 'dart:convert'; import 'package:http/http.dart' as http; Future<String?> getProductName(String barcode) async { final url = Uri.parse('https://world.openfoodfacts.org/api/v2/product/$barcode.json'); final response = await http.get(url); if (response.statusCode == 200) { final Map<String, dynamic> data = jsonDecode(response.body); // 提取通用商品名称 final productName = data['product']?['product_name']; // 若需指定语言名称,比如英文: // final productNameEn = data['product']?['product_name_en']; return productName; } else { // 处理请求失败场景 return null; } }
关键说明
- 摒弃数组索引用法:API返回的顶层数据是
{...}格式的对象,而非[...]数组,之前参照的TypeScript示例逻辑不适用,直接通过键名访问对象属性即可。 - 空安全防护:用
?操作符避免null报错,部分商品可能存在名称字段缺失的情况。
内容的提问来源于stack exchange,提问作者Felix_Gagne
相关产品推荐
相关产品推荐

