2014-03-02 52 views
0

目前,我正在學習Python的背後基礎。我的任務是創建一些簡單的與數據庫相關的Python腳本。我在使用JSON在我的SELECT腳本工作的問題。json.loads格式問題

我所需要的數據格式如下所示;

{ 
    "Data": { 
     "name1": "val1", 
     "name2": "val2", 
     "name3": "val3", 
     "name4": "val4" 
    }, 
    "IMPORTANT_NOTE": "This data is from the test database - used for demonstration only!" 
} 

數據本身在DB中存儲爲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'" 

任何想法我如何糾正這種輸出的數據類似於一個在頂部的格式?

回答

3

你轉換你的JSON對象Python字典。你爲什麼要期待一個字典是有效的JSON?事實並非如此。如果你想JSON,你應該將字典轉換回成格式:

json_data = json.dumps(FinOut)