如何在django模型实例中转换json?

时间:2014-07-14 11:47:57

标签: python json django serialization django-rest-framework

我正在尝试将json数据保存为django模型实例,我是djano-rest-framework的新手

这是我的模特:


   class objective(models.Model):
      description = models.CharField(max_length=200)
      profile_name = models.CharField(max_length=100)
      pid = models.ForeignKey('personal_info')

serializer.py


   class objective_Serilaizer(serializers.Serializer):
      description = serializers.CharField(max_length=200)
      profile_name = serializers.CharField(max_length=100)
      pid = serializers.IntegerField()

     def restore_object(self, attrs, instance=None):

        if instance:
           instance.description = attrs.get('description', instance.description)
           instance.profile_name = attrs.get('profile_name', instance.profile_name)
           instance.pid = attrs.get('pid', instance.pid)
           return instance
        return objective(**attrs)

JSON


     {
"objective": {
    "description": "To obtain job focusing in information technology.",
    "profile_name": "Default",
    "id": 1
    }
}

我试过


   >>> stream = StringIO(json) 
   >>> data = JSONParser().parse(stream)

我收到以下错误


        raise ParseError('JSON parse error - %s' % six.text_type(exc))
     ParseError: JSON parse error - No JSON object could be decoded

2 个答案:

答案 0 :(得分:1)

使用:

objective_Serilaizer(data=json)

或者可能是因为你的json是请求对象上的数据:

objective_Serilaizer(data=request.DATA)

这是Django Rest-framework docs的一个很好的演练。

答案 1 :(得分:0)

如果您确定您的JSON是一个字符串是正确的那么它应该很容易解析而不会达到您目前的长度:

>>> import json
>>> stream = """\
...      {
... "objective": {
...     "description": "To obtain job focusing in information technology.",
...     "profile_name": "Default",
...     "id": 1
...     }
... }"""
>>> json.loads(stream)
{u'objective': {u'profile_name': u'Default', u'description': u'To obtain job focusing in information technology.', u'id': 1}}

所以问题是你怎么能解析它。您引用的JSON字符串实际来自哪里?解析完JSON对象后,需要使用顶级"objective"键来访问要创建的记录中的各个数据元素。