Python处理嵌套的json

时间:2017-07-31 10:03:38

标签: json python-2.7

我将以下数据作为参数提供给我的python脚本:

undefined

剧本:

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)

这不是一个合适的JSON,因为item_value是一个字符串而不是一个JSON对象。如何在这里生成嵌套的JSON?

1 个答案:

答案 0 :(得分: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}}