Python 2.7 解析 JSON 错误:ValueError: No JSON object could be decoded - 解决方法
"Python 2.7\u00a0代码内容如下,其中/tmp/tmp/catch-pub-domain-sumary.2023-07-14..log文件类型为\u00a0ASCII Text,执行报错:ValueError: No JSON object could be decoded。请问如何解决问题?\n#!/usr/bin/env python\n# coding=utf-8\n\nimport json\nimport glob\nimport codecs\n\nipSum = {}\ndomainSum = {}\n\nfilelist = glob.glob('/tmp/tmp/catch-pub-domain-sumary.2023-07-14..log')\nfor log in filelist:\n with codecs.open(log, 'r', encoding='ascii') as f:\n flag = ''\n for line in f:\n if line.startswith('# ipmap'):\n flag = 'ip'\n continue\n if flag == 'ip':\n ipMap = json.loads(line)\n for k in ipMap:\n if k not in ipSum:\n ipSum[k] = {}\n for d in ipMap[k]:\n if d not in ipSum[k]:\n ipSum[k][d] = ipMap[k][d]\n else:\n ipSum[k][d] += ipMap[k][d]\n continue\n if line.startswith('# domainmap'):\n flag = 'domain'\n continue\n if flag == 'domain':\n domainMap = json.loads(line)\n for k in domainMap:\n if k not in domainSum:\n domainSum[k] = domainMap[k]\n else:\n domainSum[k] += domainMap[k]\n flag = ''\n break\n\n该错误通常是因为尝试解析非JSON格式的字符串导致的。要解决这个问题,你可以在尝试解析json.loads(line)之前,先检查一下字符串是否符合JSON格式。\n\n修改代码如下:\n\npython\nimport json\nimport glob\nimport codecs\n\nipSum = {}\ndomainSum = {}\n\nfilelist = glob.glob('/tmp/tmp/catch-pub-domain-sumary.2023-07-14.*.log')\nfor log in filelist:\n with codecs.open(log, 'r', encoding='ascii') as f:\n flag = ''\n for line in f:\n if line.startswith('# ipmap'):\n flag = 'ip'\n continue\n if flag == 'ip':\n try:\n ipMap = json.loads(line)\n for k in ipMap:\n if k not in ipSum:\n ipSum[k] = {}\n for d in ipMap[k]:\n if d not in ipSum[k]:\n ipSum[k][d] = ipMap[k][d]\n else:\n ipSum[k][d] += ipMap[k][d]\n except ValueError:\n continue\n continue\n if line.startswith('# domainmap'):\n flag = 'domain'\n continue\n if flag == 'domain':\n try:\n domainMap = json.loads(line)\n for k in domainMap:\n if k not in domainSum:\n domainSum[k] = domainMap[k]\n else:\n domainSum[k] += domainMap[k]\n except ValueError:\n continue\n flag = ''\n break\n\n\n在这个修改后的代码中,我们使用了try-except语句块来捕获json.loads可能抛出的ValueError异常。如果解析失败,我们会继续循环处理下一行。这样就避免了因为解析非JSON格式字符串而导致的错误。\n
原文地址: https://www.cveoy.top/t/topic/pMdA 著作权归作者所有。请勿转载和采集!