编辑: entry.content.$t
是访问单个单元格的错误字段。 entry.gsx $ [单元格列标题] 是正确的方法。抱歉并感谢您帮助解决这个问题。
原始问题:
我正在尝试解析JSON data from a Google Spreadsheet。问题是,entries字段返回一个字符串,该字符串是电子表格的整行 - 但显示为格式错误的对象。其他人如何解析这些数据?以下是内容节点的样子:
"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 + ')')
抛出错误。我认为正则表达式是一种选择,但我希望其他人可能以更优雅的方式解决这个问题。谢谢你的帮助!
答案 0 :(得分:1)
您找到了How can I access Google Sheet spreadsheets only with Javascript?吗?有一个答案指向https://github.com/mikeymckay/google-spreadsheet-javascript。
此外,https://developers.google.com/apps-script/service_spreadsheet似乎很有希望。
答案 1 :(得分:1)
$t
属性中的“text”不是JSON。根据文档,文本节点被转换为$t
属性,因此您不能依赖于格式正确的JSON中的任何内容。
我建议使用正则表达式,但我会警告你,解析输出将需要一些花哨的东西。你最终会使用一个断言,因为你不能用逗号分割 - 你必须搜索(\w+):
但是为了找到下一个元素,你将不得不接受一切到另一个匹配(\w+):
,但也不会吞噬它。它可以做到。
答案 2 :(得分:1)
就在最近,我遇到了同样的问题。
要解析 $ t 的内容,您可以使用此RegEx:
/(\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);
}
这应该有所帮助: - )