从 Google 电子表格解析 JSON
Posted
技术标签:
【中文标题】从 Google 电子表格解析 JSON【英文标题】:Parse JSON from Google Spreadsheet 【发布时间】:2012-04-03 00:56:09 【问题描述】:编辑: entry.content.$t
是访问单个单元格的错误字段。 entry.gsx$[单元格列标题] 是正确的方法。很抱歉并感谢您帮助解决此问题。
原问题:
我正在尝试解析JSON data from a Google Spreadsheet。问题是,条目字段返回的字符串是电子表格的一整行,但显示为格式错误的对象。其他人如何解析这些数据?下面是内容节点的样子:
"content":
"type" :"text",
"$t" :"location: 780 Valencia St San Francisco, CA 94110,
phonenumber: (555) 555-5555,
website: http://www.780cafe.com,
latitude: 37.760505,
longitude: -122.421447"
,
仔细看,$t
字段返回一个完整的字符串,它是 Google 电子表格中的一行。所以entry.content.$t
返回一个字符串:location: 780 Valencia St San Francisco, CA 94110, phonenumber: (555) 555-5555...
进一步加剧此问题的是电子表格中的某些单元格包含没有转义或引用的逗号(如地址)。像
jQuery.parseJSON(entry.content.$t)
或
eval('('+ entry.content.$t + ')')
引发错误。我想正则表达式是一种选择,但我希望其他人可能以更优雅的方式解决了这个问题。感谢您的帮助!
【问题讨论】:
您用来获取 JSON 数据的请求是什么?您使用类型单元格还是类型列表? (见code.google.com/apis/gdata/samples/spreadsheet_sample.html) 进一步查看示例,我认为您做错了什么 - 无论是您请求 JSON 的方式还是电子表格数据本身。据我所知,您不应该将整行作为文本字段接收;您应该在数据中获得对象和数组的组合来表示行和列。 噢!我想到了。你说对了。我提取了错误的节点。显然,它确实为每个单元格返回了单独的对象。我的错。非常感谢您看到这个。 我遇到了同样的问题。看起来我在 URL 的末尾使用了 /public/basic。它应该是 /public/values。 【参考方案1】:$t
属性中的“文本”不是 JSON。根据文档,文本节点被转换为$t
属性,因此您不能依赖任何格式正确的 JSON。
我建议改用正则表达式,但我会警告您,解析该输出将需要一些花哨的东西。你最终会使用一个断言,因为你不能用逗号分割 - 你必须搜索 (\w+):
但为了找到下一个元素,你必须接受所有匹配的 @987654324 @,但也不要狼吞虎咽。可以的。
【讨论】:
【参考方案2】:就在最近,我遇到了同样的问题。
要解析$t的内容,你可以使用这个正则表达式:
/(\w+): (.+?(?=(?:, \w+:|$)))/mgi
它将返回键值对。
javascript 示例:
var currentPropertiesText = jsonEntry['content']['$t'];
// var propsArray = currentPropertiesText.split(", ");
var re = /(\w+): (.+?(?=(?:, \w+:|$)))/mgi;
var propsArray = re.exec(currentPropertiesText)
var props = ;
while (propsArray != null)
var propName = propsArray[1];
var propValue = propsArray[2];
props[propName] = propValue;
propsArray = re.exec(currentPropertiesText);
这应该会有所帮助:-)
【讨论】:
以上是关于从 Google 电子表格解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章