Python:如何更改" timestamp"的所有实例在.JSON文件中的日期时间对象

时间:2015-09-30 12:05:55

标签: json python-2.7 datetime timestamp

我有一个存储位置数据的LocationHistory.json文件。数据如下所示:

{
 "data" : {
   "items" : [ {
     "kind" : "latitude#location",
     "timestampMs" : "1374870896803",
     "latitude" : 34.9482949,
     "longitude" : -85.3245474,
     "accuracy" : 2149
   }, {
     "kind" : "latitude#location",
     "timestampMs" : "1374870711762",
     "latitude" : 34.9857898,
     "longitude" : -85.3526902,
     "accuracy" : 2016"
   }]
  }
}

文件中有近千个这样的实例,我试图简化这个想法。 然后我通过以下代码读取数据:

json_file = open('LocationHistory.json')
json_string = json_file.read()
json_data = json.loads(json_string)

locations = json_data["data"]["items"]

现在我想改变" timestampMs"的所有出现次数。到日期时间对象。我通过回答stackoverflow上的问题找到了以下代码可以帮助我做到这一点:

datetime.datetime.fromtimestamp(
    int("timestampMs")
).strftime('%Y-%m-%d %H:%M:%S')

也是这样:

dateObject = datetime.fromtimestap(timestampMs / 1000)
otherFormat = dateObject.strftime("%Y-%m-%dT%H:%M:%SZ")

我的问题是我不熟悉JSON,我不知道如何循环或迭代所有出现的" timestampMs"在LocationHistory.json文件中并更改所有" timestampsMs"从1374870896803到2014-09-03 .....

我试过了:

for location in locations:
   print(datetime.datetime.fromtimestamp(
    int("timestampMs")
   ).strftime("%Y-%m-%dT%H:%M:%SZ")
   )

(当我尝试运行它时,这会产生无效的语法错误)

谢谢

2 个答案:

答案 0 :(得分:2)

从json文件获取POSIX时间戳并将它们转换为代表UTC时间的天真日期时间对象:

#!/usr/bin/env python
import io
import json
from datetime import datetime, timedelta

with io.open('LocationHistory.json', encoding='utf-8') as file:
    data = json.load(file)
for item in data['data']['items']:
    timestamp_millis = int(item['timestampMs'])
    utc_time = datetime(1970, 1, 1) + timedelta(milliseconds=timestamp_millis)
    print(utc_time.isoformat() + 'Z')

输出

2013-07-26T20:34:56.803000Z
2013-07-26T20:31:51.762000Z

注意:保留毫秒数。

答案 1 :(得分:0)

要从位置字典中提取数据,您可以使用get方法,然后将整数除以1000以获得没有毫秒的时间戳:

for location in locations:
    print(datetime.datetime.fromtimestamp(
        int(location.get("timestampMs"))/1000
    ).strftime("%Y-%m-%dT%H:%M:%SZ"))