Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
为什么jQuery.getJSON()会压扁我的javascript字典?_Javascript_Python_Json_Pyramid - Fatal编程技术网

为什么jQuery.getJSON()会压扁我的javascript字典?

为什么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”组合而扁平化的。这对于高度嵌套的数据来说是非常

我在通过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”组合而扁平化的。这对于高度嵌套的数据来说是非常令人讨厌的

我承认,我不确定这是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听了很高兴。我会把它编辑成我的答案,这样你就可以接受了。