我目前正在学习Python背后的基础知识。我的任务是创建一些简单的数据库相关的Python脚本。我在SELECT
脚本上使用JSON时遇到问题。
我需要的数据格式如下;
{
"Data": {
"name1": "val1",
"name2": "val2",
"name3": "val3",
"name4": "val4"
},
"IMPORTANT_NOTE": "This data is from the test database - used for demonstration only!"
}
数据本身在数据库中存储为JSON,因此它是1个字段。数据检索如下;
try:
db = MySQLdb.connect(dbhost, dbuser, dbpass, sqldb)
except:
msg = "Connect error"
else:
cursor = db.cursor()
sql = "SELECT JSON_DATA FROM TEST_DB_TABLE WHERE DATA_GUID= %s"
args = "TestData"
cursor.execute(sql,args)
for row in curosr.fetchall() : jsondata = row[0]
finally:
db.close()
如果我print(jsondata)
;
{
"name1": "val1",
"name2": "val2",
"name3": "val3",
"name4": "val4"
}
我已经习惯了PHP,所以我希望使用数组来形成其余的数据,并用json_encode
完成它。我知道Python与数组的等价物是字典,所以我觉得这就是我应该在这里使用的。我最后尝试过这个;
data = json.loads(jsondata)
FinOut = {"Data": data, "IMPORTANT_NOTE": "This data is from the test database - used for demonstration only!"
print(FinOut)
......这里的问题是它返回无效的JSON;
{'Data': {u'name1': u'val1', u'name2': u'val2', u'name3': u'val3', u'name4': u'val4'}, 'IMPORTANT_NOTE': 'This data is from the test database - used for demonstration only!'}
我确实尝试了json.load(jsondata)
,但后来cgitb
报告错误(我假设.load
是基于文件的等价物;
<type 'exceptions.AttributeError'>: 'str' object has no attribute 'read'
args = ("'str' object has no attribute 'read'",)
message = "'str' object has no attribute 'read'"
关于如何纠正此问题的任何想法都以与顶部类似的格式输出数据?
答案 0 :(得分:3)
您将JSON对象转换为Python dict。为什么你期望dict是有效的JSON?不是。如果你想要JSON,你应该将你的dict转换回那种格式:
json_data = json.dumps(FinOut)