将python输出格式化为json

2024-04-27 07:41:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个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)

为了得到我的输出。 任何帮助都将不胜感激。


Tags: 脚本jsontrue数据结构data字典格式total
2条回答

celldict放进另一个指令:

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

您必须首先将Week键添加到celldict字典中:

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

或者使用创建每个动态dict的副本:

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)

(免责声明:我没有测试这段代码,但至少应该给你一个基本的想法)

相关问题 更多 >