zoukankan      html  css  js  c++  java
  • python json解析字符串出错该如何排查问题

    每天写一点,总有一天我这条咸鱼能变得更咸

    python中对于字符串转json格式有专门的json库可以操作

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @File  : test4.py
    # @Author: gaojian
    # @Date  : 2017/12/20
    # @Desc  :
    
    import json
    a='{"aa":"aaa","vvv":22}'
    print type(a)
    b = json.loads(a)
    print type(b)
    

      输出结果:

    这种情况是针对于字符串的格式符合json格式的,但很多时候,我们读取的字符串并不一定符合json格式,那这时候用json.loads来转换则会报错,字符串很短的话我们可能会立马发现问题,但字符串很长很长的时候,那时候去找问题那就是一个灾难了,例如:

    import json,simplejson
    a="{'aa':aaa,'vvv':22}"
    b = json.loads(a)
    print type(b)
    

      这时候转换的时候只是告诉我出错了

    提示信息:

    Traceback (most recent call last):
      File "D:/test_py/test4.py", line 11, in <module>
        b = json.loads(a)
      File "C:Python27libjson\__init__.py", line 310, in loads
        return _default_decoder.decode(s)
      File "C:Python27libjsondecoder.py", line 346, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
      File "C:Python27libjsondecoder.py", line 364, in raw_decode
        raise ValueError("No JSON object could be decoded")
    ValueError: No JSON object could be decoded
    

    但并没有告诉我是哪里错了,这时候就很难发现问题了吗,但是python 有个专门的库simplejson可以解决这个问题,他会给你定位到出错的位置,从而让你解决问题,如:

    import json,simplejson
    a='{"aa":aaa,"vvv":22}'
    
    b = simplejson.loads(a)
    print type(b)
    

      错误信息:

    Traceback (most recent call last):
      File "D:/test_py/test4.py", line 11, in <module>
        b = simplejson.loads(a)
      File "C:Python27libsite-packagessimplejson\__init__.py", line 518, in loads
        return _default_decoder.decode(s)
      File "C:Python27libsite-packagessimplejsondecoder.py", line 370, in decode
        obj, end = self.raw_decode(s)
      File "C:Python27libsite-packagessimplejsondecoder.py", line 400, in raw_decode
        return self.scan_once(s, idx=_w(s, idx).end())
      File "C:Python27libsite-packagessimplejsonscanner.py", line 79, in scan_once
        return _scan_once(string, idx)
      File "C:Python27libsite-packagessimplejsonscanner.py", line 45, in _scan_once
        _scan_once, object_hook, object_pairs_hook, memo)
      File "C:Python27libsite-packagessimplejsondecoder.py", line 194, in JSONObject
        value, end = scan_once(s, end)
      File "C:Python27libsite-packagessimplejsonscanner.py", line 70, in _scan_once
        raise JSONDecodeError(errmsg, string, idx)
    simplejson.errors.JSONDecodeError: Expecting value: line 1 column 7 (char 6)
    

      明确的告诉我们是位置为7的那个地方出了问题,我们根据长度去看,发现忘记加引号了,那么加上引号

    问题解决完毕

  • 相关阅读:
    如何把SQLServer数据库从高版本降级到低版本
    关于如何利用Pocket CHM Pro制作帮助文档
    关于ASP.net TextBox控件的失去焦点后触发其它事件
    由window.history.back()引发的问题
    设置按钮不可用避免重复提交
    【转】一个高端.NET技术人才的2014年度总结
    Zabbix 各种报错信息和遇到的问题处理(持续总结更新~~~~~)
    ASP.NET调用Web Service
    ASP.NET导出bdf文件
    CS文件密码加密类
  • 原文地址:https://www.cnblogs.com/gj5379/p/8068620.html
Copyright © 2011-2022 走看看