json - 处理 JSON 序列化变化的正确方法

标签 json serialization google-visualization simplejson

我有一个使用 Python 的 SimpleJSON 来序列化 JSON 的 Web 服务,以及一个使用 Google 可视化 API 的 javascript/客户端。 。当我尝试使用 Google 数据表的查询方法读取 JSON 响应时,出现“无效标签”错误。

我注意到 Google 电子表格输出 JSON,对象键周围没有引号。我尝试在不带引号的情况下读取 JSON,效果很好。我想知道使用

将 SimpleJSON 输出读入 Google datable 的最佳方法是什么

query = new google.visualization.Query("http://www.myuri.com/api/")

我可以使用正则表达式来删除引号,但这看起来很草率。我尝试过的 javascript JSON 解析库将无法读取对象键周围没有引号的 JSON 语法。

这里有一些很好的背景阅读:对象键周围的引号:

http://simonwillison.net/2006/Oct/11/json/ .

最佳答案

您确定 Google API 需要 JSON 吗?根据我的经验,Google 的 API 往往不会像您所描述的那样被严重破坏 - 可能是他们实际上期望一种仅类似于 JSON 的不同格式。


进一步研究揭示了以 Google 期望的格式检索数据的说明:

For example, to get the dataSourceUrl from a Google Spreadsheet, do the following:

  1. In your spreadsheet, select the range of cells.
  2. Select 'Insert' and then 'Gadget' from the menu.
  3. Open the gadget's menu by clicking on the top-right selector.
  4. Select menu option 'Get data source URL'.

我这样做并在浏览器中打开了该 URL。它返回的数据肯定不是 JSON:

google.visualization.Query.setResponse(
{requestId:'0',status:'ok',signature:'1464883469881501252',
table:{cols: [{id:'A',label:'',type:'t',pattern:''},
{id:'B',label:'',type:'t',pattern:''}],
rows: [[{v:'a'},{v:'h'}],[{v:'b'},{v:'i'}],[{v:'c'},{v:'j'}],[{v:'d'},{v:'k'}],[{v:'e'},{v:'l'}],[{v:'f'},{v:'m'}],[{v:'g'},{v:'n'}]]}});

看起来结果是打算由浏览器直接执行的。尝试修改您的代码以执行以下操作:

# old
return simplejson.dumps ({"requestId": 1, "status": "ok", ...})

# new
json = simplejson.dumps ({"requestId": 1, "status": "ok", ...})
return "google.visualization.Query.setResponse(%r);" % json

关于json - 处理 JSON 序列化变化的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/176749/

相关文章:

delphi - 强制将 Real 的默认值写入 WriteComponent()

serialization - Data.Binary(或 friend ?)是否有模板 Haskell/派生机制

javascript - 谷歌可视化-点击事件

php - AFNetworking 1.x 将 JSON 发布到 PHP

php - 添加 eventNotification 后记录 INVALID_REQUEST_BODY

ajax - 如何让我的 JSON 不那么冗长?

events - 在 Angular v2 中处理来自 Google Charts 的选择事件

javascript - Google Charts 上升 1,不连续

javascript - 数组内的数组

java - com.google.gson.JsonObject 无法在 Java 中转换为 com.google.gson.JsonArray