【问题标题】:Is this a correct way to return JSON in Python/GAE for parsing in JavaScript?这是在 Python/GAE 中返回 JSON 以在 JavaScript 中解析的正确方法吗?
【发布时间】:2010-11-07 12:30:41
【问题描述】:

我正在使用 Python 的 GAE 上的 Web 应用程序中为一些 AJAX 相关的东西制作 API。将内容类型设置为“应用程序/json”并直接访问我的网址后-

http://mysite.com/api?method=theMethod&param=firstParam

-我收到“保存文件”对话框的提示,而不是看到显示的 JSON 对象。该文件包含在记事本中打开时的 JSON 对象。

这是使用 GAE 从 Python 返回 JSON 以在 JavaScript 中解析的正确方法吗?

from django.utils import simplejson
self.response.headers['Content-Type'] = 'application/json'
jsonData = {"foo" : "bar"}
self.response.out.write(simplejson.dumps(jsonData))

我注意到,当从其他地方(例如 Flickr)使用另一个 API 时,我的浏览器会显示 JSON 对象,而不是要求我保存文件。这种行为鼓励我调查我的实现。我唯一的想法是这与 JSONP 实现有关。

rfc4627来看,我应该使用'application/json'。

【问题讨论】:

    标签: python ajax json api google-app-engine


    【解决方案1】:

    这是正确的方法,json 的 mime 类型是 application/json 而不是 text/json 和 NEVER text/html。 https://www.rfc-editor.org/rfc/rfc4627 以“JavaScript Object Notation (JSON) 的 application/json 媒体类型”开头

    阅读this了解更多详情/选项

    【讨论】:

      【解决方案2】:

      我认为 Flickr API 将 json 作为“text/plain”类型返回,然后将显示为文本。您可以尝试将“text/json”作为中途点。在您的情况下,易于查看可能比正确更重要。

      还应考虑,如果任何客户端要求内容类型为“application/json”并拒绝使用“text/plain”,则客户端应明确请求其想要的类型,而不需要“/” .这可能是您在准备响应的内容类型时寻找的一个案例,并且您可以相应地记录您的服务。

      查看请求:

      http://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=cecc9218c59188ebc6150eff9cd908dc
      

      请求标头

      Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
      Referer:http://www.flickr.com/services/api/response.json.html
      User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.18 (KHTML, like Gecko) Version/4.0.1 Safari/530.18
      

      响应标头

      Connection:close
      Content-Encoding:gzip
      Content-Length:134
      Content-Type:text/plain; charset=utf-8
      Date:Thu, 02 Jul 2009 03:19:34 GMT
      P3p:policyref="http://p3p.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
      Vary:Accept-Encoding
      

      内容

      jsonFlickrApi({"method":{"_content":"flickr.test.echo"}, "format":{"_content":"json"}, "api_key":{"_content":"cecc9218c59188ebc6150eff9cd908dc"}, "stat":"ok"})
      

      【讨论】:

      • 这些也是我发现的结果,这让我质疑我的实施。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      相关资源
      最近更新 更多