V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
est
V2EX  ›  Python

有没有轻量级的 py 库能够解析在 JS 里的 JSON?

  •  
  •   est ·
    est · 2016-05-28 23:59:29 +08:00 · 4127 次点击
    这是一个创建于 3130 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如 var foobar = [[{}, {}, {}], [{}, {}, {}], ]

    这种。。平衡匹配括号就出来了。其中 var foobar 能够通过正则找到文档中的 offset 并且精确定位。

    如何把后面的 JSON 提取出来?

    不想引入一大坨 nodejs 依赖。

    parser 学得烂,菜鸟表示不会写啊 -_-
    23 条回复    2016-05-29 16:04:40 +08:00
    jarlyyn
        1
    jarlyyn  
       2016-05-29 00:02:18 +08:00
    爬虫?
    VeryCB
        2
    VeryCB  
       2016-05-29 00:07:05 +08:00 via iPhone   ❤️ 1
    guyskk
        3
    guyskk  
       2016-05-29 00:09:56 +08:00
    先要把 `[[{}, {}, {}], [{}, {}, {}], ] `取出来,然后用 js2py 这个库, https://github.com/PiotrDabkowski/Js2Py
    ```
    >>> import js2py
    >>> js2py.eval_js('[[{}, {}, {}], [{}, {}, {}], ]')
    [[{}, {}, {}], [{}, {}, {}]]
    >>>
    ```
    est
        4
    est  
    OP
       2016-05-29 00:25:31 +08:00
    @guyskk 要的就是一个工具能自动匹配突破换行、注释和空白符号可以实现 “把 `[[{}, {}, {}], [{}, {}, {}], ] `取出来” 的工具
    @VeryCB 看起来要的就是这货了! thanks !
    est
        5
    est  
    OP
       2016-05-29 00:26:14 +08:00
    @VeryCB 话说我研究过 pypy 搞那个 js 转 py 的工具。太复杂了。一个 phd 写了毕业论文就弃坑了。我日。
    Lonely
        6
    Lonely  
       2016-05-29 01:56:10 +08:00 via iPhone
    为啥我一看到 py 想到的却不是 python😨
    linuxchild
        7
    linuxchild  
       2016-05-29 01:57:21 +08:00 via Android
    @Lonely 朋友(๑°3°๑)
    Valyrian
        8
    Valyrian  
       2016-05-29 02:17:11 +08:00 via iPad
    最快的难道不是 ujson..?
    YUX
        9
    YUX  
       2016-05-29 05:08:39 +08:00
    import json

    a = """{"status":{"msg":"Success","code":0,"version":"1.0"},"result_type":1}"""

    j = json.loads(a)

    print j["status"] #{u'msg': u'Success', u'code': 0, u'version': u'1.0'}
    YUX
        10
    YUX  
       2016-05-29 05:09:34 +08:00
    另外安利一个直观查看 JSON 数据结构的工具 https://jsonformatter.curiousconcept.com/
    ZavierXu
        11
    ZavierXu  
       2016-05-29 09:42:03 +08:00
    楼上是来搞笑的么。。。。
    est
        12
    est  
    OP
       2016-05-29 09:53:36 +08:00
    @YUX

    大哥,在一堆杂乱的 js 源码里,如何提取你第 2 行代码 """ """ 之间那一坨东西?

    人工复制粘贴?
    magicdawn
        13
    magicdawn  
       2016-05-29 10:02:51 +08:00
    magicdawn
        14
    magicdawn  
       2016-05-29 10:06:05 +08:00
    Node 大法好啊~ 取出来直接 eval, 要怕出事用 vm 模块, sandbox 运行下
    est
        15
    est  
    OP
       2016-05-29 10:26:38 +08:00
    @magicdawn 嗯。你 eval 一个 `exit()` 然后进程直接退出了。 (手动 doge.gif
    est
        16
    est  
    OP
       2016-05-29 10:29:33 +08:00
    @magicdawn 看起来没处理注释 和字符串?

    比如有的人会嵌套:

    var foobar = {"key": "{ /* 注释里带一个 } 就问你叼不叼 */ \"key\": \"value}])\" }"}
    est
        17
    est  
    OP
       2016-05-29 10:30:14 +08:00
    例子有错 var foobar = {"key": /* 注释里带一个 } 就问你叼不叼 */ "{\"key\": \"value}])\" }"}
    magicdawn
        18
    magicdawn  
       2016-05-29 10:38:18 +08:00
    @est
    这个确实没有处理~
    btw 确实叼
    magicdawn
        19
    magicdawn  
       2016-05-29 10:42:45 +08:00
    @est

    有想法~又可以造轮子了~好开森...
    guyskk
        20
    guyskk  
       2016-05-29 10:45:01 +08:00
    @est
    有网址吗,我研究研究
    magicdawn
        21
    magicdawn  
       2016-05-29 10:46:51 +08:00
    @est 初步想法是先把 `/* */` `""` `''` 的 index 找出来, 组成 (start, end), 后面到 satrt , jump 到 end
    fengjianxinghun
        22
    fengjianxinghun  
       2016-05-29 10:58:25 +08:00 via iPhone
    slimit 正解
    RockyLee
        23
    RockyLee  
       2016-05-29 16:04:40 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6003 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:02 · PVG 11:02 · LAX 19:02 · JFK 22:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.