我正在尝试将网络抓取工具应用从.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响应。这也是正确的方法吗?因为代码对我来说似乎很直观。
答案 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}