2017-07-31 9 views
0
私は、引数として、私のPythonスクリプトに次のデータを供給しています

Pythonの処理のネストされたJSON

source=Blabla|| 
name=TEST Error in Log - Error: 3345|| 
item_value={ "Error": 3345, "Message": "Some error occurred", "Status": 1 } 

スクリプト:

{"source": "Blabla", "name": "TEST Error in Log - Error: 3345", "item_value": "{ \"Error\": 3345, \"Message\": \"Some error occurred\", \"Status\": 1 }"} 

#!/usr/bin/env python 
import sys, json 
data=sys.argv[3] 
if 'NOTE: Escalation cancelled' in data: 
     exit(0) 
data=data.split('||') 
datadictionary = {} 
for item in data: 
     key, val = item.split("=", 1) 
     k=key.strip() 
     v=(((((val.strip())).replace('\n',"<br>")).replace("`", "&lsquo"))) 
     datadictionary[ k ] = v 

datajson = json.dumps(datadictionary) 
datajson=datajson.encode('utf8') 

print(datajson) 

それは次のような出力を提供します

item_valueが適切なJSONではないのは、JSONオブジェクトではなく文字列です。ここに入れ子にしたJSONを生成するにはどうしたらいいですか?

答えて

0

私が最初に次の行で最初にJSONオブジェクトをデコードする必要があることを考え出し:

datadictionary['item_value']=json.loads(datadictionary['item_value']) 

ので、スクリプトは次のようになります。

#!/usr/bin/env python 
import sys, json 
data=sys.argv[3] 
if 'NOTE: Escalation cancelled' in data: 
     exit(0) 
data=data.split('||') 
datadictionary = {} 
for item in data: 
     key, val = item.split("=", 1) 
     k=key.strip() 
     v=val.strip().replace('\n',"<br>").replace("`", "&lsquo") 
     datadictionary[ k ] = v 

datadictionary['item_value']=json.loads(datadictionary['item_value']) 
datajson = json.dumps(datadictionary) 
datajson=datajson.encode('utf8') 


print(datajson) 

そして出力:

{"source": "Blabla", "name": "TEST Error in Log - Error: 3345", "item_value": {"Status": 1, "Message": "Some error occurred", "Error": 3345}} 
関連する問題