Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:json.dumps中断json数组_Python_Django - Fatal编程技术网

Python Django:json.dumps中断json数组

Python Django:json.dumps中断json数组,python,django,Python,Django,我试图以HTML形式显示JSON文档,将其分解为单独的输入项,允许修改,然后将其转换回JSON文档 首先,我使用data=json.load(json_data)将文档转换为对象,然后将数据传递给模板,在模板中访问其属性,如下所示: 一旦发布回视图,我将使用doc=json.dumps(request.POST)将其序列化回json。这适用于所有条形阵列:“国家”:“[u'US']”,它应该看起来像:“国家”:['US'] 我可以使用字符串操作来清理它,但是有更好的方法吗 view.py(去掉数

我试图以HTML形式显示JSON文档,将其分解为单独的输入项,允许修改,然后将其转换回JSON文档

首先,我使用
data=json.load(json_data)
将文档转换为对象,然后将
数据
传递给模板,在模板中访问其属性,如下所示:

一旦发布回视图,我将使用
doc=json.dumps(request.POST)
将其序列化回json。这适用于所有条形阵列:
“国家”:“[u'US']”
,它应该看起来像:
“国家”:['US']

我可以使用字符串操作来清理它,但是有更好的方法吗

view.py(去掉数据库代码)

doc
最终成为一个字符串:

{"doc_type": "Product", "countries": "[u'US']"}
items.json中的原始数据

 {"doc_type": "Product", "countries": ["US"]}

好的。罪魁祸首是这样的:

<input type="hidden" name="countries" value="{{ data.countries }}">
现在这看起来有点过分,但必须这样做,因为
request.POST
是一个JSON字符串字典(您必须手动将其转换为dict/JSON)


结论:首先在表单中使用JSON值可能不是一个好主意。

如何提交帖子?在模板中?通过一个表单
这看起来像是不应该发生的事情,因为QueryDict以与普通dict相同的方式被序列化。同样从这个字符串的形式(前缀
u
来看,你似乎在做一些奇怪的事情,比如设置
request.POST[“countries”]
str(arr)
而不是
arr
。请发布完整的代码。@KingFu如果这是唯一相关的代码,那么您似乎从客户端收到了格式错误的数据。这可能意味着
items.json
文件已损坏。检查一下。否则,“剥离的DB代码”可能要负责(损坏)。如果两者都正确,那么错误就在客户端(我假设是JavaScript)。@freakish这是唯一相关的代码,DB的东西在
doc
之后,我正在调试它,并在
doc
上破坏它以检查数据。我已经检查了
items.json
,数据看起来很好:
“国家”:[“美国],
无法获得
value=“{{json.dumps(data.countries)}
工作,因此在视图端使用了
数据中的d:d['countries]=json.dumps(d['countries'))
这与您的视图代码相结合会产生
“国家”:[\“US\”]“
,我不确定这是正确的JSON?代码更改还会导致文档重复多次,我需要查看一下at@KingFu我刚刚意识到:您没有
“数据“
在您的
return render
语句中。它是如何传递到模板的???@KingFu作为JSON:它是一个有效的JSON,但是我的代码中有一个错误。它应该是
value=request.POST[key]
(循环中的第一行)。是的,你的解决方案就是这样。我忘了你不能在Django模板中启动函数(与Mako一起工作的时间太长了)。啊,你上次的评论解决了这个问题!非常感谢。没想到它会变得如此复杂!!出于兴趣,最好先将JSON文档转换为Django模型?
<input type="hidden" name="countries" value="{{ data.countries }}">
def addProducts(request):
    if request.POST:
        post = {}
        for key in request.POST:
            value = request.POST[key]
            try:
                value = json.loads(value)
            except Exception:
                pass
            post[key] = value
        doc = json.dumps(post)
    # the other code goes here

    return render("add_products.html", {
        "products": data,
    }, context_instance=RequestContext(request))