使用Python 3.5.1,我引入了一个文本文件,其中每一行都是JSON格式: {" a":" windows"," b":"楼梯" ...}
the JSON object must be str, not 'bytes'
但我收到了错误:
onDeviceReady: function(){
window.resolveLocalFileSystemURL(cordova.file.applicationDirectory + "www/res/myfile.txt", app.gotFile, app.fail);
},
gotFile: function(fileEntry){
fileEntry.file(function(file){
var reader = new FileReader();
reader.onloadend = function(e) {
alert(this.result);
}
reader.readAsText(file);
});
},
fail: function(e){
console.log("Error reading");
console.log(e.code);
}
打印第一行文件没问题,所以我确信文件路径是正确的。
答案 0 :(得分:3)
以文本模式打开文件,而不是二进制模式(可能显式传递let latitude = NSUserDefaults.standardUserDefaults().doubleForKey(klat)
let latitude = NSUserDefaults.standardUserDefaults().doubleForKey(klong)
以覆盖系统默认值,因为JSON通常存储为UTF-8)。 encoding='utf-8'
模块只接受json
输入;从以二进制模式打开的文件中读取将返回str
个对象:
bytes
答案 1 :(得分:2)
尝试: 记录= [json.loads(line。 decode())for open in line(path,' rb')]
答案 2 :(得分:1)
您不希望指定“rb”,因为JSON模块无法读取该文件的二进制表示。你可能想要“utf-8”编码和“阅读”。编辑:我原本说过这两个都是默认值,但我注意到很多操作系统都有不同的默认编码,而Python在open()中使用系统设置作为默认值。因此,我建议明确提供编码设置为“utf-8”。
json支持从打开的文件加载“json.load”而不是“json.loads”,它从字符串加载,因此我们可以跳过read-in-as-text并直接转到JSON。我不认为你会“加载”单独的行,因为这可能不是有效的JSON。
import json
# open has __enter__ and __exit__ functions, so we can call it as a guard
# using "with" syntax and it'll close when the scope ends
with open(r".\myjson.json", encoding="utf-8") as fh:
# load() is a convenience function to help us avoid iterating lines
# on our own. It calls loads() on the whole doc and returns an obj
json_obj = json.load(fh)
print (json_obj)