首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django反序列化错误:字符串索引必须是整数

Django反序列化错误:字符串索引必须是整数
EN

Stack Overflow用户
提问于 2014-03-15 07:55:23
回答 1查看 4K关注 0票数 1

我对json、Python和Django还不熟悉。我在网上做了一些研究,但都没有解决我的问题。提前感谢您的任何见解!

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

第一步,我有一段python代码,试图与服务器进行通信。

代码语言:javascript
复制
# 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)

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

代码语言:javascript
复制
# 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")

我得到的错误消息是:

代码语言:javascript
复制
    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"])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-15 08:09:18

正如示例JSON文件 Django的文档提供的(实际上,这是我最后一次检查的地方),deserialize获取了一个字典列表(顺便说一句,它应该有一个fields键):

代码语言:javascript
复制
[
    {
        "pk": "4b678b301dfd8a4e0dad910de3ae245b",
        "model": "sessions.session",
        "fields": {
            "expire_date": "2013-01-16T08:16:59.844Z",
            ...
        }
    }
]

您还可以在医生中看到这个函数返回一个迭代器。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22421181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档