如何在flutter中读取本地json导入?

Posted

技术标签:

【中文标题】如何在flutter中读取本地json导入?【英文标题】:How to read local json import in flutter? 【发布时间】:2020-12-18 12:57:13 【问题描述】:

我在 flutter 目录中有一个 JSON 文件,而不是 assets。

json_data.json:-

 
    "foo" : "bar"
 

我想在不同的文件上读取这个 JSON。

喜欢

myfile.dart:-

 import "package:mypackage/json_data.json" as data;
 import 'dart:convert';
 
  var my_data = json.decode(data);

我收到错误:-

The name 'data' refers to an import prefix, so it must be followed by '.'.
Try correcting the name to refer to something other than a prefix, or renaming the prefix.

这里有什么问题?为什么我不能从本地导入中读取 JSON?

【问题讨论】:

因为json.decode()string 作为源。我建议使用 readAsString 将 JSON 文件作为字符串读取,然后传递给 json.decode 【参考方案1】:

您应该考虑加载assets in flutter。您不能简单地导入任意文件。导入用于源代码/库。

您需要在pubspec.yaml 中将此文件声明为资产

flutter:
  assets:
    - json_data.json

然后在您的代码中,您可以将此资源加载为String

import 'package:flutter/services.dart' show rootBundle;

Future<String> getJson() 
  return rootBundle.loadString('json_data.json');

您可以使用现有代码对 JSON 进行解码,但它应该放在某个方法体中。您调用此getJson 函数来检索 JSON 字符串:

var my_data = json.decode(await getJson());

或者,您可以通过将 JSON 文件的内容作为 String 直接放入代码中来进一步简化此操作,但这可能是不可能的,这取决于您对该 JSON 的预期用途。

const String data = '''

  "foo" : "bar"

''';
var my_data = json.decode(data);

【讨论】:

如果我想在运行时替换那个 json 文件怎么办?我可以在应用程序仍在运行时实时更新资产文件夹中的文件吗? @kakyo 资产不是文件。运行时没有可用的资产文件夹。如果要替换文件,请不要使用资产。

以上是关于如何在flutter中读取本地json导入?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤振本地化中读取嵌套的 json?

Flutter开发之JSON读取和解析

如何在flutter中本地获取json文件中的json数据

如何在 Dart/Flutter 中读取本地图像文件的字节数?

如何在 Flutter Mobile App 中加载和查询本地 json 数据

Flutter:如何调用本地 JSON 数据并动态添加到标签栏?