使用Python中的Google Cloud Endpoints将JSON作为字符串返回

时间:2017-02-27 21:06:45

标签: javascript python json google-cloud-endpoints

在遵循Cloud Endpoints指南Creating an API with Cloud Endpoints Frameworks for App Engine之后,我尝试根据自己的需要稍微改变它:

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)。

>>> import json
>>> json.dumps({"name":"me"})
'{"name": "me"}'

在App Engine环境中,由于某种原因,整个字符串都包含在"而不是'中(错误,无效的JSON)。我在Google Stackdriver Logging中看到了这一点。

"{"name": "me"}"

我可以通过手动转义"来解决这个问题:

...
tmp_json_str.replace('"','\\"')
return JSONResponse(json_str=tmp_json_str)

然后在客户端,使用JavaScript,我必须unescape "

unescapeQuotes: function(string) {
    return string.replace(/\\"/g, '"');
}

这感觉很黑,所以我寻求更清洁的实施。

关于从云端点返回JSON的问题令人惊讶:How to return a json object in Google Endpoints。答案的重点是确保任何原始RPC消息定义良好匹配它们封装的任何JSON

我同意这种方法很简洁,但如果像我一样,你不知道JSON的结构,因此只能提供一个非常基本的原型RPC消息来封装JSON字符串呢?

0 个答案:

没有答案