2016-01-17 52 views
1

我想从json文件导入数据到sqlite,但我得到了一些错误,我首先想到的问题是在路径中,我改变了他们在许多方面,但...没有结果,它给我这个错误:Python的JSON数据导入

Traceback (most recent call last): 
    File "C:/Users/Taner/PycharmProjects/untitled/MyProgram.py", line 13, in <module> 
    json_object = json.loads(dummy_json) 
    File "C:\Users\Taner\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 312, in loads 
    s.__class__.__name__)) 
TypeError: the JSON object must be str, not 'bytes' 

这里是我的代码:

import json 
import bz2 
import sqlite3 

fpath = "C:\\Users\\Taner\\Downloads\\RC_2012-12.bz2" 
databasepath = "C:\\Users\\Taner\\Desktop\\Seagate\\reddit" 

conn = sqlite3.connect(databasepath) 
curs = conn.cursor() 
with bz2.BZ2File(fpath) as file: 
    for line in file: 
     dummy_json = line 
     json_object = json.loads(dummy_json) 
     po = json.loads(line.decode('utf8')) 
     curs.execute("INSERT INTO Reddit VALUES (?,?,?)", (po['id'], po['subreddit_id'], po['subreddit'],)) 
     conn.commit() 

回答

1

你的循环的正确形式应该是:

with bz2.BZ2File(fpath) as file: 
    for line in file: 
     po = json.loads(json.loads(line.decode('utf8'))) 
     curs.execute("INSERT INTO Reddit VALUES (?,?,?)", (po['id'], po['subreddit_id'], po['subreddit'],)) 
     conn.commit() 
1

你已经有答案了这里,因为在该行下面的错误,你正确地传递之前解码从UTF-8行它到json.loads。因此错误的行是完全没有意义的,你应该删除它。