2013-08-29 30 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