使用javascript的GoogleAppEngine JSON对象

使用javascript的GoogleAppEngine JSON对象,javascript,json,google-app-engine,Javascript,Json,Google App Engine,我想创建一个包含数组的字典,并使用jquery的ajax请求将其发送给GAE。 类似于-{'a':'text','b':'othertext','c':['texta','textb']}的东西,我正在手动创建它。 我能够使用self.request.get-on-GAE接收和处理a和b,但不能使用c 有没有其他方法可以在js中创建JSON对象?请说明这个方法有什么问题 据推测,GAE的self.request.get无法将字符串数组之类的复杂对象序列化为get请求格式(?a=text&b=ot

我想创建一个包含数组的字典,并使用jquery的ajax请求将其发送给GAE。 类似于-
{'a':'text','b':'othertext','c':['texta','textb']}
的东西,我正在手动创建它。 我能够使用self.request.get-on-GAE接收和处理a和b,但不能使用c


有没有其他方法可以在js中创建JSON对象?请说明这个方法有什么问题

据推测,GAE的
self.request.get
无法将字符串数组之类的复杂对象序列化为get请求格式(
?a=text&b=othertext…

一种解决方法(尽管可能不是很整洁)是将值序列化为JSON,并传递:

var jsonObj = {
               'a':'text', 
               'b':'othertext', 
               'cJSON': JSON.stringify(['texta', 'textb'])
              };

。。。当然,您必须在接收端反序列化
cJSON

可能GAE的
self.request.get
无法将字符串数组之类的复杂对象序列化为get请求格式(
?a=text&b=othertext…

一种解决方法(尽管可能不是很整洁)是将值序列化为JSON,并传递:

var jsonObj = {
               'a':'text', 
               'b':'othertext', 
               'cJSON': JSON.stringify(['texta', 'textb'])
              };

。。。当然,您还必须在接收端对cJSON进行反序列化。

您并不是真正向服务器发送JSON。当您将对象传递给
jQuery.ajax
(或
get
/
post
包装器)时,它将被序列化为get或post变量,而不是作为JSON发送,因此您的对象将被转换为如下内容:

a=text&b=othertext&c[]=texta&c[]=textb
如果您想将整个对象作为JSON传递,您可以通过调用
JSON.stringify
(您需要包括不支持
JSON
对象的浏览器)自己对其进行转换。然后,您可以将JSON编码的字符串包装在映射中,并使用您想要的任何名称:

jQuery.post(url, { json: JSON.stringify({a:'text', ...}) }, ...);

在服务器端,您可以通过调用
self.request.get(“JSON”)
来访问JSON文本。然后必须解析JSON字符串以提取值。我对Python了解不多,但显然您只需要导入
django.utils.simplejson
并调用
simplejson.loads(json)
您并不是真的在向服务器发送json。当您将对象传递给
jQuery.ajax
(或
get
/
post
包装器)时,它将被序列化为get或post变量,而不是作为JSON发送,因此您的对象将被转换为如下内容:

a=text&b=othertext&c[]=texta&c[]=textb
如果您想将整个对象作为JSON传递,您可以通过调用
JSON.stringify
(您需要包括不支持
JSON
对象的浏览器)自己对其进行转换。然后,您可以将JSON编码的字符串包装在映射中,并使用您想要的任何名称:

jQuery.post(url, { json: JSON.stringify({a:'text', ...}) }, ...);

在服务器端,您可以通过调用
self.request.get(“JSON”)
来访问JSON文本。然后必须解析JSON字符串以提取值。我对Python了解不多,但显然您只需要导入
django.utils.simplejson
并调用
simplejson.loads(json)
您实际上发送的是urlencoded请求参数,而不是json。JQuery可能将列表编码为同一参数的多个值,这意味着您可以使用
self.request.get_all
,它将返回一个列表-
self.request.get
将只返回第一个值。

您实际上发送的是urlencoded请求参数,而不是JSON。JQuery可能将列表编码为同一参数的多个值,这意味着您可以使用
self.request.get\u all
,它将返回一个列表-
self.request.get
将只返回第一个值。

您使用什么JQuery代码发送请求?我对Python GAE了解不多,但似乎request.get处理的是普通的get和POST参数,而不是JSON属性您使用什么jQuery代码来发送请求?我对Python GAE了解不多,但似乎request.get处理的是正常的get和POST参数,而不是JSON属性。我理解你的意思,但Davids解决方案对我有用,+1用于你的详细ans。我非常感谢你的帮助。我理解你的意思,但Davids解决方案对我有用,+1谢谢你的详细回答。我真的很感谢你的帮助。你好,尼克,我试过全部获取,但当我发送“c”:[“texta”,“textb]”时它不起作用。酷:这并不重要,因为你已经让它起作用了,但是如果你这样称呼它:
self.request.get\u all(“c[])
,它可能会起作用。默认情况下,jQuery使用PHP的约定,即在末尾放入“[]”来将参数视为数组。嗨,Nick,我尝试了get_all,但当我发送“c”:['texta','textb']@Cool:这并不重要,因为你已经让它工作了,但是如果您这样称呼它:
self.request.get_all(“c[])
,那么
get_all
可能会起作用。默认情况下,jQuery使用PHP的约定,即在末尾放入“[]”,以将参数视为数组。