2016-03-23 9 views
0

私は、次の文字列(json.loadsのjson.dumps)Pythonで文字列とJSONを使用した作業

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: Expecting property name: line 1 column 2 (char 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: No JSON object could be decoded

を与えます!ありがとうございました!

答えて

0

これは私のために働いた。 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) 
0

それは単一引用符ではなく二重引用符を持っているので、これは有効なJSONではありません。

1つのオプションは、ast.literal_eval()で安全この文字列は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' 
関連する問題