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

2024-06-13 23:00:08 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我尝试使用Google地图建议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中,键周围会有如下的引号:

^{pr2}$

我本来可以用simplejson之类的,但现在我有点卡住了。在

这里有两种可能的解决方案:要么我可以访问API代码并找到返回正确JSON的选项,要么使用python实现。在

有什么想法吗。在


Tags: 文档comapijsonhttp示例google地图
3条回答

呃,那真的很烦人。它是一个JavaScript文本,但它不是JSON。在

理论上,您应该能够从Python stdlib(或simplejsonpre-2.6,相同)导入json.decoder.JSONDecoder,并将其子类化,然后将该子类传递给json.loads,以覆盖解码器行为。实际上,这并不可行,因为json.decoder充满了抵制子类化的全局交叉引用,而您需要更改的位是def JSONObject中间的一记重击。在

因此,有必要看看其他pythonjson库。我找到了this one,在“非严格”模式下,它将解析未加引号的对象属性名:

>>> import demjson
>>> demjson.decode('{suggestion:[{query:"London",interpretation: ...')
{u'suggestion': [{u'query': u'London', u'operation': 2, u'interpretation': ...
import demjson
demjson.decode(google.js)

我在试图解析googlefinance选项“JSON”数据时发现了这个问题,正如很多人所指出的那样,它并不兼容JSON。在

demjson让我省去了编写一个令人讨厌的正则表达式字符串的麻烦;它就是这样。在

为了得到JSON,我试着四处打探,但如果没有做到这一点,就会有人不可避免地对我大喊大叫:

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

notjson = '{...}'

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

相关问题 更多 >