如何加载看起来像json的字符串?

时间:2016-07-05 15:11:28

标签: python json python-3.x

我有一个url,它定义了中国每个城市的名称和代码。

我可以使用正则表达式获取如下所示的目标字符串:

{'Hot':[{display: "Beijing", data: "Beijing|Beijing(BJS)|1|BJS"}, 
{display: "Shanghai", data: "Shanghai|Shanghai(SHA)|2|SHA"}...]}

我想使用json.loads(str)将字符串转换为json对象,但它会引发异常,我猜因为该字符串不是标准的json字符串。

所以我想解析字符串,映射每个城市的名称和代码,如:

Beijing - BJS
Shanghai - SHA

我该怎么做?

------------------ 2016年7月6日------------------

这是我的代码。

def parse_city_code():
    url = 'http://webresource.c-ctrip.com/code/cquery/resource/address/flight/flight_new_poi_gb2312.js'
    request = urllib.request.Request(url)
    response = urllib.request.urlopen(request)

    data_str = response.read().decode('GBK')

    search = re.search('cQuery.jsonpResponse.suggestion=(\{.+\})',data_str)
    if(search):
        data_str = '"'+search.group(1)+'"'
    else:
        data_str = ''

    json.loads(data_str)

它会引发异常:

Traceback (most recent call last):
  File "C:/Users/twlsoft/PycharmProjects/ctrip-flight-ticket/main.py", line 23, in <module>
    parse_city_code()
  File "C:/Users/twlsoft/PycharmProjects/ctrip-flight-ticket/main.py", line 19, in parse_city_code
    json.loads(data_str)
  File "D:\Python35-32\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "D:\Python35-32\lib\json\decoder.py", line 342, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 19 (char 18)

因为数据不是有效的json数据吗?

------------------ 2016年7月6日------------------

Here is the solution

0 个答案:

没有答案