JSON对象必须是str,而不是' bytes'

时间:2016-02-04 04:46:24

标签: python json text import

使用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);
}

打印第一行文件没问题,所以我确信文件路径是正确的。

3 个答案:

答案 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)