如:
JSArrayStr = """var foods = [[19,'奶油布丁','Cream Pudding','2719-3',0],[20,'日式多味卷','Japan Roll Cake','2719-166',0],[21,'虎皮千层','TigerSkin Cake','2719-27',0],[22,'肉松吐司','Meat Floss Toast','2719-5',0],[23,'巧克力布丁','Chocolate Pudding ','2719-13',0],[24,'法式长棍','Long Baguette','2719-2',0],[25,'提拉米苏','Tiramisu','2719-6',0],[26,'水果塔','Fruit Tower','2719-74',0],[27,'港式班戟','HK Pancake','2719-156',0]];"""
像是这种结构的数组,如果直接用 json.loads(JSArray)报错的,只能手工对 JSArrayStr 做文本硬处理吗?(硬处理指:手工逐个细节(split 又 strip)*N 次再写入到新字典)
Python 是否有更强大的轮子可以直接弄出字典?
1
SakuraKuma 2021-02-22 11:47:04 +08:00 1
如果所有数据都是这样可以先把头的变量和尾的分号删了, 把引号都变"就可以转了.
|
2
rodrick 2021-02-22 11:50:15 +08:00 1
淦,看个数组看饿了
|
3
jones2000 2021-02-22 12:24:10 +08:00 1
字符串直接用 js 编译下, 不就出来了嘛。这个不就是 1 个 js 语句嘛。
|
4
Rhilip 2021-02-22 12:34:02 +08:00 1
如果字符串是这样的,那 eval 是最好的办法,直接从字面量变成 foods 变量,再 Array.map 就好,
如果 eval 不行,那就用 new Function(JSArrayStr + ';return foods;')() 获取 foods 变量 |
5
Rhilip 2021-02-22 12:36:57 +08:00
哦,这是在 Python 中解析 javascript ? 那就只能参照 1L,掐头去尾做替换了
|
6
palmers 2021-02-22 12:42:28 +08:00 1
JSON.parse("var foods = [[19,'奶油布丁','Cream Pudding','2719-3',0],[20,'日式多味卷','Japan Roll Cake','2719-166',0],[21,'虎皮千层','TigerSkin Cake','2719-27',0],[22,'肉松吐司','Meat Floss Toast','2719-5',0],[23,'巧克力布丁','Chocolate Pudding ','2719-13',0],[24,'法式长棍','Long Baguette','2719-2',0],[25,'提拉米苏','Tiramisu','2719-6',0],[26,'水果塔','Fruit Tower','2719-74',0],[27,'港式班戟','HK Pancake','2719-156',0]];".split('=')[1].split(';')[0].replaceAll("\'", "\""));
|
7
palmers 2021-02-22 12:42:49 +08:00
然后遍历处理就可以了吧?
|
8
palmers 2021-02-22 12:43:48 +08:00
楼主你这个字符串 我认为不可能有一个到位的轮子 这完全是一个个性的字符串 没有业务通用性
|
9
JellyL 2021-02-22 13:17:07 +08:00 1
是用 python 在做 ast 语义分析吗?
那要用 ast 库,json.loads()不一定直接起作用 前面的截取没用 strip,如果都是这种用单引号结构化的纯数组 js,直接 index 吧 ``` import ast JSArrayStr = """var foods = [[19,'奶油布丁','Cream Pudding','2719-3',0],[20,'日式多味卷','Japan Roll Cake','2719-166',0],[21,'虎皮千层','TigerSkin Cake','2719-27',0],[22,'肉松吐司','Meat Floss Toast','2719-5',0],[23,'巧克力布丁','Chocolate Pudding ','2719-13',0],[24,'法式长棍','Long Baguette','2719-2',0],[25,'提拉米苏','Tiramisu','2719-6',0],[26,'水果塔','Fruit Tower','2719-74',0],[27,'港式班戟','HK Pancake','2719-156',0]];""" startIndex = JSArrayStr.index('[') endIndex = JSArrayStr.index(';') temp = JSArrayStr[startIndex:endIndex] result = ast.literal_eval(temp) print(result) ``` |
10
no1xsyzy 2021-02-22 14:50:39 +08:00 1
看上去可以截头去尾然后 ast.literal_eval
|
11
nekochyan 2021-02-22 16:01:12 +08:00 1
你这个不是嵌套数组问题,是你这段字符串本身是一句 js 可执行代码,需要自己掐去头尾分析
|
12
krixaar 2021-02-22 16:27:50 +08:00 1
from selenium import webdriver
from selenium.webdriver.chrome.options import Options import json chrome_options = Options() chrome_options.headless = True driver = webdriver.Chrome(options=chrome_options) result = json.loads(driver.execute_script(JSArrayStr+'return JSON.stringify(foods);')) driver.quit() 现代问题需要现代手段.jpg |