【问题标题】:json.loads() ValueError: Expecting , delimiter with two values set as 000json.loads() ValueError: Expecting , delimiter 有两个值设置为 000
【发布时间】:2021-11-29 20:33:39
【问题描述】:

我正在解析每行都是一个 json 字符串的日志文件。 这是两个示例,一个适用于 json.loads(python 2.7 或 python 3.7),另一个因分隔符错误而失败。唯一的区别是键的值:“cache_response_code”和“server_response”

如果值为000,则报错,如果是正常的HTTP响应,如“404”,则没有问题。如果该值设置为 0,它也可以工作。仅当值为 00 或 000 或任何多个 0 值时才会失败。

为什么?

例子:

import json

line1 = '{"localtimestamp": "18/Mar/2020:13:39:04 -0400", "client_ip":"10.247.69.247", "cache_response":"ERR_INVALID_URL", "cache_response_code":404, "request_page":"http://10.247.135.122/", "server_response":404, "bytes":297, "user_agent":"-", "sessionId": "-", "origin_response_time": 0, "client_response_time": 0, "ssl_connection": 0, "referrer": "-"}'
line_json1 = json.loads(line1)

line2 = '{"localtimestamp": "18/Mar/2020:13:39:09 -0400", "client_ip":"10.247.69.247", "cache_response":"ERR_UNKNOWN", "cache_response_code":000, "request_page":"/", "server_response":000, "bytes":0, "user_agent":"-", "sessionId": "-", "origin_response_time": 0, "client_response_time": 5001, "ssl_connection": 0, "referrer": "-"}'
line_json2 = json.loads(line2)

解释器中的输出:

>>> import json
>>>
>>> line1 = '{"localtimestamp": "18/Mar/2020:13:39:04 -0400", "client_ip":"10.247.69.247", "cache_response":"ERR_INVALID_URL", "cache_response_code":404, "request_page":"http://10.247.135.122/", "server_response":404, "bytes":297, "user_agent":"-", "sessionId": "-", "origin_response_time": 0, "client_response_time": 0, "ssl_connection": 0, "referrer": "-"}'
>>> line_json1 = json.loads(line1)
>>>
>>> line2 = '{"localtimestamp": "18/Mar/2020:13:39:09 -0400", "client_ip":"10.247.69.247", "cache_response":"ERR_UNKNOWN", "cache_response_code":000, "request_page":"/", "server_response":000, "bytes":0, "user_agent":"-", "sessionId": "-", "origin_response_time": 0, "client_response_time": 5001, "ssl_connection": 0, "referrer": "-"}'
>>> line_json2 = json.loads(line2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 1 column 134 (char 133)

【问题讨论】:

标签: python json delimiter valueerror


【解决方案1】:

我找到了一个优雅的解决方案来解决我的问题。而不是 json,我使用 ast

import ast

line1 = '{"cache_response_code":404, "referrer": "-"}'
line1_dict = ast.literal_eval(line1)

line2 = '{"cache_response_code":000, "referrer": "-"}'
line2_dict = ast.literal_eval(line2)

我的真实代码是:

if files_dict:
    for file in files_dict.values():
        with open(file) as f:
            lines = f.readlines()
        for line in lines:
            line = ast.literal_eval(line)

【讨论】:

    【解决方案2】:

    您的 str 格式不正确:

    
    # str like this will work fine
    s1 = '"{\\"code\\":000}"'
    json.loads(s1)
    
    # works good if do a dumps() before loads()
    json.loads(json.dumps(line2))
    
    

    【讨论】:

      【解决方案3】:

      这似乎工作正常。我刚刚将响应代码放在双引号中,

      import json
      
      line1 = '{"localtimestamp": "18/Mar/2020:13:39:04 -0400", "client_ip":"10.247.69.247", "cache_response":"ERR_INVALID_URL", "cache_response_code":"404", "request_page":"http://10.247.135.122/", "server_response":"404", "bytes":297, "user_agent":"-", "sessionId": "-", "origin_response_time": 0, "client_response_time": 0, "ssl_connection":0, "referrer": "-"}'
      line_json1 = json.loads(line1)
      line2 = '{"localtimestamp": "18/Mar/2020:13:39:09 -0400", "client_ip":"10.247.69.247", "cache_response":"ERR_UNKNOWN", "cache_response_code":"000", "request_page":"/", "server_response":"000", "bytes":0, "user_agent":"-", "sessionId": "-", "origin_response_time": 0, "client_response_time": 5001, "ssl_connection": 0, "referrer": "-"}' 
      line_json2 = json.loads(line2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        • 2021-01-20
        • 2014-01-30
        • 1970-01-01
        相关资源
        最近更新 更多