从JSON文件中选择特定字段 - Python

时间:2015-01-19 15:19:30

标签: python json

我试图比较两个json文件。一个是json.dump,另一个是进入方法的新json对象。

我们使用来自服务器的测试结果生成JSON文件,然后将它们传递给此方法:

def save_json_results(data):
    if not os.listdir('/opt/Code/JSON'):
        with open('/opt/Code/JSON/current_json.json','w') as outfile:
        json.dump(data,outfile)
        send_json_results(data)
    else:
        f = open('/opt/Code/JSON/current_json.json')
        file_data = json.loads(f)
        d = json.loads(data)
        if sorted(file_data.items()) == sorted(d.items()) and file_data.get("timestamp",{}) != d.get("timestamp",{}):
            with open('/opt/Code/JSON/current_json.json','w') as outfile:
                json.dump(data,outfile)
        else:
            os.rename('/opt/Code/JSON/current_json.json','/opt/cfm_health_checks/Code/JSON/prev_json.json')
            with open('/opt/Code/JSON/current_json.json','w') as outfile:
                json.dump(data,outfile)
            send_json_results(data)

此方法的前提是获取正在传入的JSON对象(数据),然后检查目录是否为空,然后将该文件存储为最新的JSON,否则它将尝试打开已经存在的文件(我可能错误地假设我必须将其作为JSON对象重新加载)然后尝试比较这些文件,如果它们是相同的并且它只有不同的时间戳,那么就不要将JSON发送到数据库(因为它只是浪费网络资源,因为没有关于测试结果的信息不同)但是它仍然会使新数据=最新的JSON,否则它会将其发送到数据库并相应地重命名文件。

{
"acronym": "", 
"api": [], 
"cell_version": "", 
"cfm": [], 
"city": "Belfast", 
"country": "UK", 
"latitude": 54.614443, 
"longitude": -5.899953, 
"nas": [], 
"node": [], 
"number_of_cells": "", 
"switch": [], 
"timestamp": "2015-01-19 15:04:13.489097"
}

上面的示例JSON。

1 个答案:

答案 0 :(得分:2)

d返回的file_datajson.loads对象应具有标准的python词典界面。

因此,您应该能够使用d访问d["acronym"]中的首字母缩写词值。

您还可以执行for keyvaluepair in file_data.items():迭代每个JSON条目,并根据键名对每个键值对应用单独的比较。

你也可以这样做 [d[k[0]] for k in sorted(d.items()) if k[0] != "timestamp"] == [file_data[k[0]] for k in sorted(file_data.items()) if k[0] != "timestamp"] 虽然这是一个很长的路线,但我个人不会过去通过代码审查。