Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Javascript 以字符串形式从Python中的Google云端点返回JSON_Javascript_Python_Json_Google Cloud Endpoints - Fatal编程技术网

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, '"');
}