从Google电子表格中解析JSON

时间:2012-04-03 00:56:10

标签: javascript json google-api google-sheets

编辑: 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 + ')')

抛出错误。我认为正则表达式是一种选择,但我希望其他人可能以更优雅的方式解决这个问题。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

答案 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);
    }

这应该有所帮助: - )