我存储用户收藏夹到json文件,但我得到以下错误:
未处理的异常:类型“\u InternalLinkedHashMap”
我将以下数据添加到文件中:
{
3423: {
'ID': 3423,
'Title': 'Jupiter Ascending',
'Image': 'https://...'
}
}
代码是:
File jsonFile;
Directory dir;
String fileName = "Reading.json";
bool fileExists = false;
List<Map> fileContent;
@override
void initState() {
super.initState();
/*to store files temporary we use getTemporaryDirectory() but we need
permanent storage so we use getApplicationDocumentsDirectory() */
getApplicationDocumentsDirectory().then((Directory directory) {
dir = directory;
jsonFile = new File(dir.path + "/" + fileName);
fileExists = jsonFile.existsSync();
if (fileExists)
this.setState(
() => fileContent = json.decode(jsonFile.readAsStringSync()));
});
}
void createFile(Map content, Directory dir, String fileName) {
print("Creating file!");
File file = new File(dir.path + "/" + fileName);
file.createSync();
fileExists = true;
file.writeAsStringSync(json.encode(content));
}
void writeToFile(var key, var value) {
print("Writing to file!");
Map content = {key: value};
if (fileExists) {
print("File exists");
Map jsonFileContent = json.decode(jsonFile.readAsStringSync());
jsonFileContent.addAll(content);
jsonFile.writeAsStringSync(json.encode(jsonFileContent));
} else {
print("File does not exist!");
createFile(content, dir, fileName);
}
this.setState(() => fileContent = json.decode(jsonFile.readAsStringSync()));
print(fileContent);
}
我很困惑,不知道如何解决这个问题。
您已经删除了您的WriteToFile
方法中的任何键入痕迹,这使得Dart无法帮助您。问题来自:
void writeToFile(var key, var value) {
print("Writing to file!");
Map content = {key: value};
...
首先,永远不要将var
用作方法的参数类型。这真的很糟糕,因为你允许所有的类型都不是你想要的。
在本例中,json的结果。解码(jsonFile.readAsStringSync())
将是一个映射
但是您使用
Map Content={key: value};
创建的Map类型将是Map
因为你不能把
Map的内容
您可以做的是将
键至少设置为如下字符串:
void writeToFile(String key, var value) {
print("Writing to file!");
final content = {key: value};
...
我还会说,如果您使用的是
var
和最终
,而不是尝试手动键入类型,您可以帮助自己。如果您想要类型,这很好,但是您真的需要显式地写入类型的正确泛型部分。
例如,这是错误的:
Map jsonFileContent = json.decode(jsonFile.readAsStringSync());
因为你是在把一般的部分赶走。相反,它应该是:
Map<String, dynamic> jsonFileContent = json.decode(jsonFile.readAsStringSync());
或者让Dart处理这些东西:
final jsonFileContent = json.decode(jsonFile.readAsStringSync());
问题内容: 我正在Ruby中创建哈希,并希望以正确的格式将其写入JSON文件。 这是我的代码: 这是结果文件的内容: 我正在使用Sinatra(不知道哪个版本)和Ruby v 1.8.7。 如何以正确的JSON格式将其写入文件? 问题答案: 需要JSON库,并使用。 您的temp.json文件现在看起来像:
问题内容: 当我在Python中打开FIFO(命名管道)进行写入时,发生了非常奇怪的事情。考虑一下当我尝试打开FIFO以便在交互式解释器中进行写入时发生的情况: 以上行将阻塞,直到我打开另一个解释器并键入以下内容: 我不明白为什么我必须等待打开管道进行读取,但是让我们跳过它。上面的代码将阻塞,直到有可用的数据为止。但是,假设我回到第一个解释器窗口并输入: 预期的行为是,在第二个解释器上,对的调用将
问题内容: 我在变量中存储了JSON数据。 我想将其写入文本文件进行测试,因此不必每次都从服务器获取数据。 目前,我正在尝试: 我收到此错误: TypeError:必须是字符串或缓冲区,而不是dict 如何解决这个问题? 问题答案: 您忘记了实际的JSON部分- 是字典,尚未进行JSON编码。写这样的最大兼容性(Python 2和3): 在现代系统(即Python 3和UTF-8支持)上,您可以使
问题内容: 我将JSON数据存储在变量中data。 我想将其写入文本文件进行测试,因此不必每次都从服务器获取数据。 目前,我正在尝试: 我收到此错误: 必须是字符串或缓冲区,而不是dict 如何解决? 问题答案: 你忘记了实际的JSON部分- data是字典,尚未进行JSON编码。写这样的最大兼容性(Python 2和3): 在现代系统(即Python 3和UTF-8支持)上,你可以使用
问题内容: 我已经习惯了 但是,似乎已经弃用了。推荐使用哪种方法进行上述操作? 更新:关于…的所有这些答案,”\n”这是通用的还是特定于的?IE,我应该上运行吗? 问题答案: 这应该很简单: 从文档: 写入以文本模式打开的文件时(默认),请勿用作行终止符;在所有平台上都使用一个’\ n’代替。 一些有用的读物: with声明 open() ‘a’用于追加或使用 ‘w’截断书写 os(特别是os
问题内容: 我一直在尝试对导入的某些数据使用mongo,但是我无法在我的文档描述中正确使用它。 这是我使用mongoimport导入的.json的示例:https ://gist.github.com/2917854 我注意到,尽管为每个商店都创建了一个对象,但所有文档仍被导入到一个唯一的对象中。 这就是为什么当我尝试寻找商店或任何我想查询的东西时,所有文档都被退回的原因。 我希望能够查询数据库以