在Python / Django中反序列化JSON日期字段

时间:2017-03-02 10:47:19

标签: python json django date

我正在尝试将网络抓取工具应用从.Net移植到Python。它接收类似于以下内容的json响应:

[
  {
    "Code": "AAA",
    "Date": "/Date(1481875200000)/",
    "Value": 12345.00
  }
]

这可以很容易地被Newtonsoft Json反序列化。但是我似乎无法使用Python内置的Json解码器反序列化这个

from django.db import models

class ItemModel(models.Model):
    code = models.CharField(max_length=5)
    date = models.DateTimeField()
    value = models.IntegerField(default=0)

import json

parsed_data = json.loads(json_data, encoding='utf-8')
new_model=ItemModel()
new_model.code = parsed_data["Code"]
new_model.date = parsed_data["Date"]
new_model.value = parsed_data["Value"]
new_model.save()

给出了

  

验证错误:[u"' /日期(1481875200000)/'值无效   格式。它必须是YYYY-MM-DD HH:MM [:ss [.uuuuuu]] [TZ]格式。"]

编辑:现在我知道这是因为将字符串分配给日期时间字段

有没有办法尝试将此数据解析为django模型? - 因为我无法修改json响应。这也是正确的方法吗?因为代码对我来说似乎很直观。

1 个答案:

答案 0 :(得分:1)

您需要为“日期”字段实现自定义解码器。

import json
from datetime import datetime

def parseMyData(dct):
    if 'Date' in dct:
        timestamp = int(dct['Date'][6:-2])
        dct['Date'] = datetime.fromtimestamp(timestamp)
    return dct


jdata = '''{
"Code": "AAA",
"Date": "/Date(14818752000)/",
"Value": 12345.00
}
'''

json.loads(jdata,  object_hook=parseMyData)

并返回

{u'Code': u'AAA',
 'Date': datetime.datetime(2439, 8, 3, 10, 0),
 u'Value': 12345.0}