跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • JavaScript 里的嵌套数组,转为字典的问题。。。
未分類
23 2 月 2021

JavaScript 里的嵌套数组,转为字典的问题。。。

JavaScript 里的嵌套数组,转为字典的问题。。。

資深大佬 : qazwsxkevin 2

如:

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 是否有更强大的轮子可以直接弄出字典?

大佬有話說 (12)

  • 資深大佬 : SakuraKuma

    如果所有数据都是这样可以先把头的变量和尾的分号删了, 把引号都变”就可以转了.

  • 資深大佬 : rodrick

    淦,看个数组看饿了

  • 資深大佬 : jones2000

    字符串直接用 js 编译下, 不就出来了嘛。这个不就是 1 个 js 语句嘛。

  • 資深大佬 : Rhilip

    如果字符串是这样的,那 eval 是最好的办法,直接从字面量变成 foods 变量,再 Array.map 就好,
    如果 eval 不行,那就用 new Function(JSArrayStr + ‘;return foods;’)() 获取 foods 变量

  • 資深大佬 : Rhilip

    哦,这是在 Python 中解析 javascript ? 那就只能参照 1L,掐头去尾做替换了

  • 資深大佬 : palmers

    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(“‘”, “””));

  • 資深大佬 : palmers

    然后遍历处理就可以了吧?

  • 資深大佬 : palmers

    主你这个字符串 我认为不可能有一个到位的轮子 这完全是一个个性的字符串 没有业务通用性

  • 資深大佬 : JellyL

    是用 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)

    “`

  • 資深大佬 : no1xsyzy

    看上去可以截头去尾然后 ast.literal_eval

  • 資深大佬 : nekochyan

    你这个不是嵌套数组问题,是你这段字符串本身是一句 js 可执行代码,需要自己掐去头尾分析

  • 資深大佬 : krixaar

    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

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具