簡體   English   中英

將python輸出格式化為json

[英]format python output to json

我編寫了一個Python腳本,以Json格式輸出一個長數據結構(我稱之為“celldict”的字典)。 這是其中的一小部分:

{
    "1224": {
        "OUT3FA_5": 12,
        "IN1": 37,
        "Total_IN1": 37
    },
    "1225": {
        "OUT3FA_5": 24,
        "IN1": 59,
        "Total_IN1": 22
    }
}

但我想做的是這樣的事情:

{
    "success": true,
    "data": [
        {
            "Week":"1224",
            "OUT3FA_5": 65,
            "IN1": 85,
            "Total_IN1": 100
        },
        {
            "Week":"1225",
            "OUT3FA_5": 30,
            "IN1": 40,
            "Total_IN1": 120
        }
    ]
}

有沒有辦法用Python格式化json輸出以獲得我想要的東西? 我做:

print json.dumps(celldict)

得到我的輸出。 任何幫助將非常感激。

celldict 放在另一個詞典中:

json.dumps({'success': True, 'data': celldict.values()})

您必須首先將Week密鑰添加到celldict詞典:

for d in celldict.itervalues():
    celldict['Week'] = '1238'

或使用即時創建每個詞典的副本:

json.dumps({'success': True, 'data': [dict(d, Week='1238') for d in celldict.values()]})

后一種方法,帶有一些縮進,產生:

>>> print json.dumps({'success': True, 'data': [dict(d, Week='1238') for d in celldict.values()]}, indent=4)
{
    "data": [
        {
            "OUT3FA_5": 24, 
            "Week": "1238", 
            "Total_IN1": 22, 
            "IN1": 59
        }, 
        {
            "OUT3FA_5": 12, 
            "Week": "1238", 
            "Total_IN1": 37, 
            "IN1": 37
        }
    ], 
    "success": true
}

在行之間讀取,似乎輸入示例中的12241225鍵實際上是您所指的周數。 如果是這樣,它們很容易合並:

json.dumps({'success': True, 'data': [dict(d, Week=k) for k, d in celldict.iteritems()]})

會產生:

{
    "data": [
        {
            "OUT3FA_5": 24, 
            "Week": "1225", 
            "Total_IN1": 22, 
            "IN1": 59
        }, 
        {
            "OUT3FA_5": 12, 
            "Week": "1224", 
            "Total_IN1": 37, 
            "IN1": 37
        }
    ], 
    "success": true
}

json模塊遵循數據結構,因此要獲得所需的輸出,您必須重新排列數據。 您可以構建一個像這樣的新字典:

data = []
for week, values in celldict.iteritems():
  v2 = copy.copy(values)
  v2['week'] = week
  data.push(v2)
newdict = { 'success' : true,
            'data' : data }
json.dumps(newdict)

(免責聲明:我沒有測試這段代碼,但它應該至少給你一個基本的想法)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM