将Google结果对象(纯js)转换为Python对象

时间:2010-04-29 08:29:51

标签: javascript python json

所以我正在尝试使用Google Map建议API来请求地名建议。不幸的是,我找不到这方面的文档。

这是一个示例URI:

http://maps.google.com/maps/suggest?q=lon&cp=3&ll=55.0,-3.5&spn=11.9,1.2&hl=en&gl=uk&v=2

返回:

{suggestion:[{query:"London",...

我想在python(2.5)中使用它。现在在适当的JSON中,键周围会有引用,如下所示:

{"suggestion":[{"query":"London",...

我可以使用simplejson或者其他东西,但因为它有点卡住了。

这里有两种可能的解决方案;或者我可以使用API​​代码并找到返回正确JSON的选项,或者我在python中执行此操作。

请任何想法。

3 个答案:

答案 0 :(得分:2)

为了获得JSON,我会试着四处寻找,但如果没有人会不可避免地对我大吼大叫这个小怪物:

class Iden(object):
  def __getitem__(name, index):
    return index

notjson = '{...}'

data = eval(notjson, {}, Iden())

答案 1 :(得分:2)

呃,这确实很烦人。它是一个JavaScript文字,但它 - 毫无意义 - 不是JSON。

理论上你应该能够从Python stdlib(或json.decoder.JSONDecoder pre-2.6,它是相同的)导入simplejson并将其子类化,然后将该子类传递给{{1覆盖解码器行为。实际上这并不可行,因为json.loads充满了抵制子类化的全局交叉引用,而你需要改变的位是json.decoder中间的爆炸。

所以它可能值得一看其他Python JSON库。我发现this one,在'非严格'模式下,将解析不带引号的对象属性名称:

def JSONObject

答案 2 :(得分:0)

import demjson
demjson.decode(google.js)

我在尝试解析Google财经选项" JSON"时发现了这一点。数据,正如许多人所指出的那样,并不符合JSON标准。

demjson救了我写一个令人讨厌的正则表达式字符串;它只是有效。