2012-11-28 7 views
2

Json 형식으로 긴 데이터 구조 ("celldict"라는 사전)를 출력하는 Python 스크립트를 작성했습니다.형식 python 출력을 json

{ 
    "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 
     } 
    ] 
} 

이 있습니까 얻을 파이썬으로 JSON 출력을 포맷하는 방법을 내가 내가 필요? 내가 할 :

print json.dumps(celldict) 

내 출력을 얻을 수 있습니다. 도움을 주시면 감사하겠습니다.

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

를 각 딕셔너리의 복사본을 생성 사용

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

당신은 먼저 celldict 사전에 Week 키를 추가해야합니다 :

답변

7

그냥 내부에 또 다른 딕셔너리를 celldict를 넣어 즉석에서 :

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 
} 
+0

감사를

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) 

을 :이 같은 새 사전을 만들 수있다! 그리고 내가 추가하고 싶은 "주"문자열은 어떨까요? 내 딕테이션의 모든 키 (숫자 값 1224와 1225로 표시) 앞에''Week ''를 넣는 것이 필요한 것을 알 수 있습니다. – salamey

+0

@ user1734229 :'celldict'의 사전을 쉽게 업데이트 할 수 있습니다. –

+0

예, 좋습니다! 그러나 당신의 대답을 받아들이 기 전에 매주 (12 개월이 있다고 가정), dict의 키에 어떻게 접근하여 Week ='에 할당 할 수 있습니까? – salamey

0

json으로 모듈 그렇게 원하는 출력을 사용하면 데이터를 재 배열해야 얻을, 데이터의 구조를 따른다. (:이 코드를 테스트하지 못했지만, 그것은 당신에게 기본적인 생각 이상 제공해야합니다 면책 조항)