2014-03-02 2 views
0

저는 현재 파이썬의 기초를 배우고 있습니다. 몇 가지 간단한 데이터베이스 관련 Python 스크립트를 작성해야했습니다. 내 SELECT 스크립트에서 JSON으로 작업하는 데 문제가 있습니다.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() 

이렇게하면 i print(jsondata);

{ 
    "name1": "val1", 
    "name2": "val2", 
    "name3": "val3", 
    "name4": "val4" 
} 

는 나는 내가 나머지 데이터를 형성하고 json_encode와 함께 마무리 배열을 사용하는 기대 PHP를 사용하고 있습니다. 필자는 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 객체를 파이썬 dict로 변환했습니다. 왜 dict가 유효한 JSON이 될 것으로 기대합니까? 그렇지 않습니다 .JSON이 필요한 경우, dict을 다시 그 형식으로 변환해야합니다. 형식 :

json_data = json.dumps(FinOut)