2013-08-29 56 views
0

假設我處理以下兩種(或更多)JSON串從字典:在Python中合併JSON,替代eval()?

JSONdict [ '上下文'] =「{ 「上下文」: 「{上下文}」, 「PID」: 「{PID}」} '

JSONdict [ 'RDFchildren'] ='{ 「結果」:[{ 「對象」: 「信息:fedora的/書:fullbook」},{ 「對象」: 「信息:「object」: 「info:fedora/book:HTML」},{「object」: 「info:fedora/book:altoXML」},{「object」: 「 info:fedora/book:thumbs「},{」object「: 」info:fedora/book:originals「}]}'

我想創建一個合併的JSON字符串,以「上下文」和「查詢」作爲根級別鍵。是這樣的:

{ 「上下文」:{ 「PID」: 「韋恩:campbellamericansalvage」, 「上下文」: 「object_page」}, 「RDFchildren」:{ 「結果」:[{ 「對象」 :「對象」: 「info:fedora/book:fullbook」},{「object」: 「info: 「: 」info:fedora/book:altoXML「},{」object「: 」info:fedora/book:thumbs「},{」object「: 」info:fedora/book:originals「}]}}

以下工作,但我想避免使用usi如果可能的話,可以使用ng eval()

# using eval 
    JSONevaluated = {} 
    for each in JSONdict: 
     JSONevaluated[each] = eval(JSONdict[each]) 
    JSONpackage = json.dumps(JSONevaluated) 

也得到了這樣的工作,但感覺hackish的只怕編碼和逃逸將成爲問題比較現實的元數據來通過:

#iterate through dictionary, unpack strings and concatenate 
    concatList = [] 
    for key in JSONdict:   
     tempstring = JSONdict[key][1:-1] #removes brackets 
     concatList.append(tempstring)   

    JSONpackage = ",".join(concatList) #comma delimits 
    JSONpackage = "{"+JSONpackage+"}" #adds brackets for well-formed JSON 

有什麼想法?建議?

回答

1

在第一個示例中,您可以使用json.loads()而不是eval()

+0

太棒了。謝謝,像魅力一樣工作。 – ghukill