为什么jQuery.getJSON()会压扁我的javascript字典?
我在通过jQuery.getJSON()方法将javascript字典传输到服务器时遇到了一个大问题。我在jscript中声明了此词典:为什么jQuery.getJSON()会压扁我的javascript字典?,javascript,python,json,pyramid,Javascript,Python,Json,Pyramid,我在通过jQuery.getJSON()方法将javascript字典传输到服务器时遇到了一个大问题。我在jscript中声明了此词典: data = {'a': 1, b:{'c':2, 'd':3}}; 当我打电话时: jQuery.getJSON("myurl", data, callback) 服务器将收到一个包含以下值的字典: {'a':1, 'b[c]':2, 'b[d]':3}. 请注意,子字典是通过将“b”键与子键“c”和“d”组合而扁平化的。这对于高度嵌套的数据来说是非常
data = {'a': 1, b:{'c':2, 'd':3}};
当我打电话时:
jQuery.getJSON("myurl", data, callback)
服务器将收到一个包含以下值的字典:
{'a':1, 'b[c]':2, 'b[d]':3}.
请注意,子字典是通过将“b”键与子键“c”和“d”组合而扁平化的。这对于高度嵌套的数据来说是非常令人讨厌的
我承认,我不确定这是javascript和JSON序列化的问题,还是接收数据的web框架Python和Pyramid的问题。我在发送数据之前尝试了字符串化,并使用Python的json库对其进行反序列化,但我只得到了错误
有什么帮助吗?数据的发送方式是正确的 数据字段是通过HTTP发送的数据。如果通过HTTP get发送,您将在查询字符串中看到参数
myurl?a=1&b%5Bc%5D=2&b%5Bd%5D=3
未替换的URL:
myurl?a=1&b[c]=2&b[d]=3
如果要将JSON发送到服务器,则需要将其字符串化。使用时,您需要包含一个JSON库,以支持IE8之前的版本
您需要将字符串化数据分配给变量
jQuery.getJSON("myurl",{data: JSON.stringify(data)}, callback);
这将通过一个名为
data
的变量传递到服务器。您真的使用单引号吗?在这种情况下,尝试将它们更改为双引号。请注意,这不是JSON,而是Javascript对象文字。使用单引号非常好,就像根本不使用引号作为属性名一样。@bazmegakapa-是的,很难从问题中确定这是序列化对象还是文本,但不是序列化的。事实上,我尝试过使用stringify:jQuery.getJSON(“myurl”,JSON.stringify(data),callback),但没有解决问题,除非我在后端处理不当。在python中,我用一个变量捕获数据,导入json库并调用json.loads(data),这会抛出一个错误,称为“预期的字符串或缓冲区”。有什么想法吗?你需要把字符串化的数据分配给一个变量jQuery.getJSON(“myurl”,{data:JSON.stringify(data)},回调)
这将通过名为data
@Gazler的变量传递给您的服务器-谢谢。字符串化并将其分配给getJSON调用中的一个变量就成功了。@J-bob听了很高兴。我会把它编辑成我的答案,这样你就可以接受了。