【问题标题】:Working with string and json in python (json.loads json.dumps) [duplicate]在python中使用字符串和json(json.loads json.dumps)[重复]
【发布时间】:2023-03-21 10:44:01
【问题描述】:

我有以下字符串

 results = "{'eventid': '766', 'category': '0', 'uptime': '0', 'severity': '0', 'traptime': '0', 'formatline': '0', 'hostname': '0', 'community': '0', 'agentip': '192.168.250.50', 'eventname': '1.3.6.1.2.1.1.3.0', 'timestamp': '17-12-2015', 'trapoid': '0', 'enterprise': '0'}, {'eventid': '1.3.6.1.4.1.3955.2.7.1', 'category': '0', 'uptime': '0', 'severity': '0', 'traptime': '0', 'formatline': '0', 'hostname': '0', 'community': '0', 'agentip': '192.168.250.50', 'eventname': '1.3.6.1.6.3.1.1.4.1.0', 'timestamp': '17-12-2015', 'trapoid': '0', 'enterprise': '0'}"

我想将其解析为 JSON。我的尝试:

results = json.loads(results)

给我一​​个

ValueError:预期属性名称:第 1 行第 2 列(字符 1)

将字符串改为:

results = "'details': {'eventid': '766', 'category': '0', 'uptime': '0', 'severity': '0', 'traptime': '0', 'formatline': '0', 'hostname': '0', 'community': '0', 'agentip': '192.168.250.50', 'eventname': '1.3.6.1.2.1.1.3.0', 'timestamp': '17-12-2015', 'trapoid': '0', 'enterprise': '0'}, {'eventid': '1.3.6.1.4.1.3955.2.7.1', 'category': '0', 'uptime': '0', 'severity': '0', 'traptime': '0', 'formatline': '0', 'hostname': '0', 'community': '0', 'agentip': '192.168.250.50', 'eventname': '1.3.6.1.6.3.1.1.4.1.0', 'timestamp': '17-12-2015', 'trapoid': '0', 'enterprise': '0'}"

给我

ValueError: 无法解码 JSON 对象

欢迎任何帮助!提前致谢!

【问题讨论】:

    标签: python json


    【解决方案1】:

    这对我有用。我不得不将您的单引号更改为下面的双引号,因为就像this answer 所述,JSON 语法不是 Python 语法。您还需要将您的 2 个 JSON 对象放入一个对象数组中,如果您希望这样的话,可以放在“详细信息”键下。

    import json
    
    results = "{'details':[{'eventid': '766', 'category': '0', 'uptime': '0', 'severity': '0', 'traptime': '0', 'formatline': '0', 'hostname': '0', 'community': '0', 'agentip': '192.168.250.50', 'eventname': '1.3.6.1.2.1.1.3.0', 'timestamp': '17-12-2015', 'trapoid': '0', 'enterprise': '0'}, {'eventid': '1.3.6.1.4.1.3955.2.7.1', 'category': '0', 'uptime': '0', 'severity': '0', 'traptime': '0', 'formatline': '0', 'hostname': '0', 'community': '0', 'agentip': '192.168.250.50', 'eventname': '1.3.6.1.6.3.1.1.4.1.0', 'timestamp': '17-12-2015', 'trapoid': '0', 'enterprise': '0'}]}"
    
    results = results.replace("'", '"')
    data = json.loads(results)
    

    【讨论】:

      【解决方案2】:

      这不是一个有效的 JSON,因为它有单引号而不是双引号。

      一种选择是安全地ast.literal_eval()评估这个字符串:

      >>> from ast import literal_eval
      >>> results = "{'eventid': '766', 'category': '0', 'uptime': '0', 'severity': '0', 'traptime': '0', 'formatline': '0', 'hostname': '0', 'community': '0', 'agentip': '192.168.250.50', 'eventname': '1.3.6.1.2.1.1.3.0', 'timestamp': '17-12-2015', 'trapoid': '0', 'enterprise': '0'}, {'eventid': '1.3.6.1.4.1.3955.2.7.1', 'category': '0', 'uptime': '0', 'severity': '0', 'traptime': '0', 'formatline': '0', 'hostname': '0', 'community': '0', 'agentip': '192.168.250.50', 'eventname': '1.3.6.1.6.3.1.1.4.1.0', 'timestamp': '17-12-2015', 'trapoid': '0', 'enterprise': '0'}"
      >>> literal_eval(results)[0]['eventid']
      '766'
      

      【讨论】:

        猜你喜欢
        • 2020-09-08
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 2016-01-14
        • 2017-11-28
        • 1970-01-01
        相关资源
        最近更新 更多