【问题标题】:Is Google data source JSON not valid?谷歌数据源 JSON 无效吗?
【发布时间】:2010-10-12 07:49:43
【问题描述】:

我正在使用他们的Python library 实现一个 Google 数据源。我希望能够使用 simplejson library. 将库的响应导入另一个 Python 脚本中

但是,即使他们的 example 也无法在 JSONLint 中验证:

{cols:
    [{id:'name',label:'Name',type:'string'},
     {id:'salary',label:'Salary',type:'number'},
     {id:'full_time',label:'Full Time Employee',type:'boolean'}],
rows:
    [{c:[{v:'Jim'},{v:800,f:'$800'},{v:false}]},
     {c:[{v:'Bob'},{v:7000,f:'$7,000'},{v:true}]},
     {c:[{v:'Mike'},{v:10000,f:'$10,000'},{v:true}]},
     {c:[{v:'Alice'},{v:12500,f:'$12,500'},{v:true}]}]}

如何调整 simplejson 'loads' 函数来导入上述 JSON 内容?我认为主要问题是对象键不是字符串。

我宁愿不编写正则表达式来将键转换为字符串,因为我认为这样的代码维护起来很烦人。

尝试使用 simplejson 将上述 JSON 导入 Python 时,我目前收到“期望属性名称:第 1 行第 1 列(字符 1)”错误。

【问题讨论】:

    标签: python simplejson


    【解决方案1】:

    没有字符串键的JSON被认为是无效的。

    {id:'name',label:'Name',type:'string'}
    

    必须是:

    {'id':'name','label':'Name','type':'string'}
    

    根据Google Data Source 页面,他们返回了无效的 JSON。他们没有具体说出来,但他们所有的例子都没有在键上加引号。

    这是一个相当完整的JSON processors for Python 列表,其中详细介绍了它们支持的格式以及效果如何。大多数不支持非字符串键,但似乎demjson 会转换它。

    easy_install demjson
    

    【讨论】:

    • JSON 期望字符串作为键,而不是 python 字典,例如,{1:1, 2:4} 是有效的 python 字典,但它是无效的 JSON。 {id:1}{"id":1} 是有效的 Javascript。
    • 要清楚,我的意思是显示的示例不是有效的 python 字典。索引号是合法的,但任何名称都必须是字符串。 {id:1} 是有效的 Javascript 但无效的 Python。
    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 2011-09-01
    相关资源
    最近更新 更多