根据值替换 json 结构中的数据



我有一个以下格式的文件(myfile.txt)

{"click_id": 124, "created_at": "2017-02-03T10:51:33", "product_id": 97373, "product_price": 320.50, "user_id": 1, "ip": "null"}
{"click_id": 125, "created_at": "2017-10-03T10:52:33", "product_id": 96373, "product_price": 20.50, "user_id": 1, "ip": "London"}
{"click_id": 126, "created_at": "2017-10-03T11:50:33", "product_id": 88373, "product_price": 220.50, "user_id": 2, "ip": "London"}

函数:

def get_status(self, user_id, date):
        for rec in self.RECORDS:
            if rec['user_id'] == user_id and dt.datetime.strptime(rec['created_at'],'%Y-%m-%dT%H:%M:%S') == date:
                return rec['status']

上述函数根据提供的输入返回状态。状态可以是"Valid", "Invalid", "Old", "New"

有没有办法解析myfile.txt并添加通过将函数get_status中传递的created_atuser_idmyfile.txt中的和匹配返回的status键?

输出(myfile.txt):

{"click_id": 124, "created_at": "2017-02-03T10:51:33", "product_id": 97373, "product_price": 320.50, "user_id": 1, "ip": "null","status":"New"}
    {"click_id": 125, "created_at": "2017-10-03T10:52:33", "product_id": 96373, "product_price": 20.50, "user_id": 1, "ip": "London","status":"Old"}
    {"click_id": 126, "created_at": "2017-10-03T11:50:33", "product_id": 88373, "product_price": 220.50, "user_id": 2, "ip": "London","status":"Valid"}

首先,请注意您的文件不是有效的 JSON。由于它是一个列表,因此您的对象应包含在数组中。

这将导入文件,解析它并将其写出到同一个文件中。您只需要输入逻辑即可替换for循环中的状态。

import json
data_file = "myfile.txt"
data = open(data_file, "r+") #r+ so the file can be both read and written to
parsed_data = json.load(data)
for obj in parsed_data:
    obj['status'] = "modified status" #replace the status here according to your logic
new_data = json.dumps(parsed_data)
data.seek(0)
data.write(new_data)
data.truncate() #not entirely necessary
data.close()

最新更新