Python Django:json.dumps中断json数组
我试图以HTML形式显示JSON文档,将其分解为单独的输入项,允许修改,然后将其转换回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(去掉数
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))