从字符串(javascript数组)获取有效的python列表

从字符串(javascript数组)获取有效的python列表,python,regex,arrays,json,Python,Regex,Arrays,Json,我试图从服务器的响应中获取有效的python列表,如下图所示: window.\uu search.list=[{“order”:“1”,“base”:“LAW”,“n”:“148904”,“access”:{“css”:“avail\u yes”,“title”:“\u042” 2\u0435\u043a\u0441\u0442\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0434\u043e\u0441\u0442\u0443

我试图从服务器的响应中获取有效的python列表,如下图所示:

window.\uu search.list=[{“order”:“1”,“base”:“LAW”,“n”:“148904”,“access”:{“css”:“avail\u yes”,“title”:“\u042” 2\u0435\u043a\u0441\u0442\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d},标题为“\”\u0410 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 u0430\u0446\u0438\u0438\“\u043e\u0442 24.07.2002 N 95-\u0424\u0417(\u0440\u0435\u0434。\u043e\u0442 02.07.2013)(\u0441\u0438\u0437\u043c\u0438\u0434\u043e\u043f.,\u0432\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u043c\u0438\u0432\u0441\u0438\u043b\u0443\u0441.08.2013)}

我通过使用
data=json.loads(re.search(r)(?=\[)(.*?)\s*(?=\;)”,url.group(1))从字符串中切断“window.\u search.list=”和“;”,然后它看起来像标准的json:

[{u'access':{u'css':u'avail\u yes',u'title':u'\u0422\u0435\u043a\u0441\u0442\u0434\u043e\u043a\u04 43\u043c\u0435\u043d\u0442\u0430\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d'},u'标题:u'“u0410\u0410\u0410\u0410\u0410\u0410\u0410\u0440\u0440\u0410\U044 4\U044\U044 4\u0410\u0410\u0410\u0410\u0410\u0410\u0410\u0410\u0410\u0440\u0440\u0440\u0440\u0410\U044 4 4 4 4 4\U044 4 4 4 4\U044 4 4 4 4 4\U044 4 4 4 4 4 4 4 4 4 4\U044\U044 4 4\U044 4 4 4 4 4 4 4 4 4 4 4\U044 4 4\U044 4\U044\U044 4 4 4 4 4 4 4 4 4\或者或者或者或者或者或者或者或者或者或者或者或者或者或者或者U044 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 40\u0430\u0446\u0438\u0438“\u043e\u0442 24.07.2002 N 95-\u0424\u0417(\u04 40\u0435\u0434.\u043e\u0442 02.07.2013)(\u0441\u0438\u0437\u043c.\u0438\u0434\u043e \u043f.,\u0432\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u043c\u0438\u0432\u0441 \u0438\u043b\u0443\u0441 01.08.2013),u'base:u'LAW',u'order:u'1',u'n:u'148904'},…]

但有时,在迭代其他URL时,我会遇到如下错误:

File "/Developer/Python/test.py", line 123, in order_search
    data = json.loads(re.search(r"(?=\[)(.*?)\s*(?=\;)", url).group(1))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Invalid \uXXXX escape: line 1 column 20235 (char 20235)
data = re.search(r'(?=\[)(.*?)[\;]*$', response).group(1)
我如何修复它,或者可能有另一种方法来获取有效的JSON(使用本机库是可取的)?

关于:

response = response.strip() #get rid of whitespaces
response = response[response.find("["):] #trim everything before the first '['
if response[-1:] == ";": #if last char == ";"
    response = response[:-1] #trim it

在正则表达式中这样做似乎是一个很大的错误。

可能,你的正则表达式已经找到了char’;在一个响应的某个地方,因此,你会得到一个错误,因为使用正则表达式,你可能收到了一个不完整的、裁剪的响应,这就是为什么你不能把它转换成JSON。 是的,我同意用户RickyA的观点,即有时使用本机工具,代码会比编写正则表达式更容易阅读。但在这里,我更愿意使用正则表达式,类似这样:

File "/Developer/Python/test.py", line 123, in order_search
    data = json.loads(re.search(r"(?=\[)(.*?)\s*(?=\;)", url).group(1))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Invalid \uXXXX escape: line 1 column 20235 (char 20235)
data = re.search(r'(?=\[)(.*?)[\;]*$', response).group(1)
我相信您的意思是变量“url”表示来自服务器的响应,那么最好使用变量名称“response”而不是“url


如果您在使用正则表达式时遇到一些问题,我建议您使用正则表达式编辑器,如。这是在线正则表达式编辑器,它解释了输入的每个表达式块。

实际上,您收到的错误消息中的那些
XXXX
,我会感兴趣。啊,我明白了,XXXX是逐字记录的(现在复制该错误消息)。您应该查看输入字符串中的给定点,然后:
尝试:
json。加载(x)
,但ValueError作为问题除外:
打印x[int(problem.args[0]。拆分(''.[-1][:-1])-5:[:30]