推荐学习书目
› 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
null0z
V2EX  ›  Python

python 如何判断一个字符串是不是 json 格式数据

  •  
  •   null0z · Apr 8, 2016 via iPhone · 14640 views
    This topic created in 3866 days ago, the information mentioned may be changed or developed.
    15 replies  •  2016-04-09 21:39:18 +08:00
    momo1999
    momo1999
    Apr 8, 2016
    2
    try 一下能不能 load 咯
    toono
    toono
    Apr 9, 2016
    3
    ```python
    import json

    def is_json(myjson):
    try:
    json_object = json.loads(myjson)
    except ValueError, e:
    return False
    return True
    ```
    我只是搬运一下上面的 stack overflow 的答案。
    如果使用 json.loads() 方法抛出 ValueError 的话即是解析错误。
    toono
    toono
    Apr 9, 2016❤️1
    4
    ``` python
    import json

    def is_json(myjson):
    try:
    json_object = json.loads(myjson)
    except ValueError, e:
    return False
    return True
    ```
    我只是搬运一下上面的 stack overflow 的答案。
    如果使用 json.loads() 方法抛出 ValueError 的话即是解析错误。
    qqmishi
    qqmishi
    Apr 9, 2016
    5
    json.loads()解析一下就好了
    SoloCompany
    SoloCompany
    Apr 9, 2016❤️1
    6
    其实
    如果你的目的不是准确的格式检查
    而仅仅是希望数据格式自动适配
    并且常用的数据类型都是 object 而不是 array
    直接判断一下第一个字符是不是 { 就好了
    如果希望自动适配 array 的话,就多判断一下第一个字符是不是 [ 呗
    florije
    florije
    Apr 9, 2016❤️1
    7
    json.loads('10086')
    florije
    florije
    Apr 9, 2016❤️1
    8
    json loads 之后不异常,看数据是 dict 或者 array 就可以了其实。
    null0z
    null0z
    OP
    Apr 9, 2016
    9
    @wenyu1001 感谢, baidu , bing 都没有检索到。。被墙真难受,本来觉得 try 不优雅的,看来还是得 try ,感谢
    pynix
    pynix
    Apr 9, 2016
    10
    感觉 xy problem
    calease
    calease
    Apr 9, 2016❤️1
    11
    @florije json 不止 dict 和 array 。
    @null0z 如果很多地方要用的话可以用 contextlib.contextmanager wrap 一下。

    @ contextmanager
    def json_deserializer(my_str):
    try:
    yield json.loads(my_str)
    except:
    print "not valid json"

    with json_deserializer(my_str) as my_json_object:
    print "%s is deserialized into %s" % (my_str, my_json_object)
    vob636
    vob636
    Apr 9, 2016❤️1
    12
    @calease 标准 json 需要 dict 包裹……,不标准的限制的 array 。
    florije
    florije
    Apr 9, 2016
    13
    @vob636 确实是有这说法,不过 @calease 说的是,只考虑简单问题了,不过话说 LZ 的情况也能解决了吧貌似。
    calease
    calease
    Apr 9, 2016❤️1
    14
    @vob636
    @florije
    没听说过这种说法。有出处吗?
    RFC 上说 json 有 6 种 data types ,并且也没有指明任何哪种是 standard 的。
    null0z
    null0z
    OP
    Apr 9, 2016
    15
    @calease 问题解决啦!很棒!感谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4531 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:04 · PVG 17:04 · LAX 01:04 · JFK 04:04
    ♥ Do have faith in what you're doing.