Javascript 以字符串形式从Python中的Google云端点返回JSON
遵循《云端点指南》之后,我尝试根据自己的需要对其稍作修改:Javascript 以字符串形式从Python中的Google云端点返回JSON,javascript,python,json,google-cloud-endpoints,Javascript,Python,Json,Google Cloud Endpoints,遵循《云端点指南》之后,我尝试根据自己的需要对其稍作修改: class JSONResponse(messages.Message): json_str = messages.StringField(1, repeated=False, required=True) @endpoints.api(name='api', version='v1') class JsonApi(remote.Service): @endpoints.method(None, JSONResp
class JSONResponse(messages.Message):
json_str = messages.StringField(1, repeated=False, required=True)
@endpoints.api(name='api', version='v1')
class JsonApi(remote.Service):
@endpoints.method(None, JSONResponse, http_method='POST', name='test')
def get_json(self, request):
tmp_json_obj = {"name":"me"}
tmp_json_str = json.dumps(tmp_json_obj)
return JSONResponse(json_str=tmp_json_str)
在Python shell中,json.dumps返回一个json字符串,其中包含键/值对的“
,以及包含整个字符串的”
(好的、有效的json)
在应用程序引擎环境中,由于某种原因,整个字符串都包含在“
中,而不是”
(错误、无效的JSON)。我在谷歌云上看到了这一点
"{"name": "me"}"
我可以通过手动转义“
来克服此问题:
...
tmp_json_str.replace('"','\\"')
return JSONResponse(json_str=tmp_json_str)
然后在客户端,使用JavaScript,我必须取消scape“
这感觉像黑客,所以我寻找一个更干净的实现
关于从云端点返回JSON,有几个令人惊讶的问题:。答案集中在确保任何proto-RPC消息定义良好,并且与它们封装的任何JSON匹配
我同意这种方法是干净的,但如果像我一样,你不知道JSON的结构,因此只能提供一个非常基本的原始RPC消息来封装JSON字符串,那该怎么办?你听说过Google JavaScript客户端库吗,它将使你的web应用程序/前端和云端点之间的交互更加轻松。不需要操作JSON,但需要操作JavaScript对象。@3371862-问题在于定义和实现API的服务器端,而不是使用API的客户端大小。我真的不清楚这里的问题是什么。整个字符串应该用双引号括起来——单引号不是有效的JSON。你能粘贴你正在编写的浏览器客户端的原始输出吗?@saiyr-你说得对。Sackdriver日志和浏览器日志都在打印并封装它。
“
。我现在已成功地将JSON作为字符串返回,并将其解析为对象。
...
tmp_json_str.replace('"','\\"')
return JSONResponse(json_str=tmp_json_str)
unescapeQuotes: function(string) {
return string.replace(/\\"/g, '"');
}