【问题标题】:Django deserialization error: string indices must be integersDjango反序列化错误:字符串索引必须是整数
【发布时间】:2014-04-20 16:47:11
【问题描述】:

我是 json、Python 和 Django 的新手。我在网上做了一些研究,但没有一个能解决我的问题。提前感谢您提供任何见解!

我正在构建一个允许移动设备更新服务器数据库的系统,该数据库由 Django 管理。我目前只在我向 Django 识别的 URL 发送请求的本地机器上进行测试。

第一步我有一段python代码尝试与服务器通信。

# in test.py:
data =  '''{"pk": 4, "model": "arts"}'''
data = json.loads(data)
data = json.dumps(data)

URL = "my local host's URL"
h = httplib2.Http(".cache")   
resp, content = h.request(URL, "POST", body = data)

然后在服务器上调用视图函数。

# in views.py:
def Updates(request, category):

    if request.method=='POST':

        print 'Data: %s' % request.body  
        ## this prints successfully: 
        ## > Data: {"pk": "4", "model": "arts"}

        resultJson = serializers.deserialize('json', request.body)

        for obj in resultJson:
            print "OK"

        return HttpResponse(request.body)

    else:
        return HttpResponse("Wrong Method")

我得到的错误信息是:

    Django Version:     1.6.2
    Exception Type:     DeserializationError
    Exception Value:    string indices must be integers
    ...

    Traceback Switch to copy-and-paste view

C:\Python27\lib\site-packages\django\core\handlers\base.py in get_response
             response = wrapped_callback(request, *callback_args, **callback_kwargs)

C:\Python27\lib\site-packages\django\views\decorators\csrf.py in wrapped_view
            return view_func(*args, **kwargs)

C:\pathToViewsFile\views.py in Updates
              for obj in resultJson:


C:\Python27\lib\site-packages\django\core\serializers\json.py in Deserializer
            six.reraise(DeserializationError, DeserializationError(e), sys.exc_info()[2])


C:\Python27\lib\site-packages\django\core\serializers\json.py in Deserializer
            for obj in PythonDeserializer(objects, **options):

C:\Python27\lib\site-packages\django\core\serializers\python.py in Deserializer
            Model = _get_model(d["model"])

【问题讨论】:

    标签: python json django rest serialization


    【解决方案1】:

    正如example JSON file Django 的文档提供的那样(实际上这是我检查的最后一个地方),deserialize 获取一个字典列表(顺便说一下,它应该有一个fields 键):

    [
        {
            "pk": "4b678b301dfd8a4e0dad910de3ae245b",
            "model": "sessions.session",
            "fields": {
                "expire_date": "2013-01-16T08:16:59.844Z",
                ...
            }
        }
    ]
    

    您还可以在deserialize's doc 中看到该函数返回一个迭代器。

    【讨论】:

    • 谢谢!我认为我的问题不是将其形成为数组。在大括号周围添加 '[' 和 ']' 解决了我的问题。顺便说一句:我的代码中有字段键,但忘记复制到问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2022-07-25
    • 2014-12-30
    • 2012-12-11
    • 2021-10-30
    相关资源
    最近更新 更多