0

I have the following string:

 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'}"

And I would like to parse it to JSON. My attempts:

results = json.loads(results)

Gives me a

ValueError: Expecting property name: line 1 column 2 (char 1)

Changing the string to:

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'}"

Gives me

ValueError: No JSON object could be decoded

vvvvv
  • 25,404
  • 19
  • 49
  • 81
Didina Deen
  • 195
  • 2
  • 17

2 Answers2

1

This worked for me. I had to change your single quotes to double quotes below, because like this answer stated, JSON syntax is not Python syntax. You also need to put your 2 JSON objects into an array of objects, and under the "details" key if you want it that way.

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)
Community
  • 1
  • 1
user3194712
  • 1,655
  • 2
  • 10
  • 9
0

This is not a valid JSON since it has single quotes and not double quotes.

One option would be to safely eval this string with 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'
alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195