2017-12-25 8 views
-1

ich einen Tisch info_tbl in postgresql habenPython: json.dumps Ausgabe in benutzerdefinierten Format

 Column  |   Type   | Modifiers 
----------------------+------------------------+----------- 
task_info   | character varying(100) | 
timestamp   | date     | 
task_count   | integer    | 

Also im Grunde ich Betrieb holen Sie auf der db "select * from info_tbl" und die Datenausgabe im JSON-Format erhalten mit json.dumps. Aber das löschte ich bekomme so etwas wie dieses:

[ 
    { 
    "task_info": "ABC", 
    "timestamp": "2017-04-30", 
    "task_count": 993 
    }, 
    { 
    "task_info": "PQR", 
    "timestamp": "2017-05-31", 
    "task_count": 413 
    } 
] 

Während das, was ich wünsche, ist eigentlich so etwas zu erreichen:

[ 
    { 
    "task_info": "ABC", 
    "data_to_plot": [["2017-04-30", "993"],["2017-05-28", "624"],["2017-06-21", "811"]] 
    }, 
    { 
    "task_info": "PQR", 
    "data_to_plot": [["2017-05-31","413"],["2017-06-16", "773"],["2017-07-21", "941"],["2017-08-30", "493"]] 
    } 
] 

diese Ausgänge sind nur aus Gründen der Verständigung daher nur vorgestellt haben zuerst zwei Datensätze, während die tatsächliche Tabelle mehr als 1000 Datensätze enthält. Ich werde diese verwenden, um Diagramme zu plotten.

+0

Sie haben eigene Methode, um Format Ergebnis zu tun - ohne die Verwendung von 'json.dumps' - vor allem müssen Sie Daten unterschiedlich organisiert. Oder Sie organisieren die Daten zuerst auf andere Weise. – furas

+0

aus bestimmten Gründen kann ich das Datenformat (Tabellenstruktur) nicht ändern, da es auch andere Abhängigkeiten hat. Ich wollte wissen, ob es irgendwie möglich ist, die json.dumps-Datenausgabe erneut zu formatieren, um sie an die gewünschte Ausgabe anzupassen. –

+0

erwarten Sie zu unterschiedliche Ergebnis - Sie können nicht so viel Dump neu formatieren. Sie müssen Daten reorganisieren, um sie anzuzeigen. Sie müssen einige Elemente in Listen gruppieren. vielleicht mit 'pandas' wäre es einfacher, Daten mit' groupby() 'zu gruppieren – furas

Antwort

0

stellt sich heraus, dass @furas recht hatte, ist es nicht wirklich eine gute Praxis, einen Dump neu zu formatieren und damit Pandas zu verwenden, um die Neuformatierung durchzuführen. Ich dachte, es wird für andere nützlich sein, die auch versuchen, Daten als Eingabe für HighCharts Plotten vorzubereiten, von nun an, posten die Work-Around-ich mit Pandas.

import psycopg2 
from psycopg2.extras import RealDictCursor 

con = psycopg2.connect("dbname='yourDBname' user='yourUserName' host='yourAddressOrLocalhost' password='yourPassword'") 
cur = con.cursor(cursor_factory=RealDictCursor) 

query = "select * from info_tbl" 
cur.execute(query) 

df = pd.DataFrame(cur.fetchall(),index=None) 
df['data_to_plot'] = df.apply(lambda row: [str(row['timestamp']) , row['task_count']], axis = 1) 

result = df.groupby('task_info')['data_to_plot'].apply(list).reset_index().to_json(orient='records') 
#result 
print(json.dumps(json.loads(result),indent=2)) 

Ausgang:

''' 
    [ 
     { 
     "task_info": "ABC", 
     "data_to_plot": [["2017-04-30", "993"],["2017-05-28", "624"],["2017-06-21", "811"]] 
     }, 
     { 
     "task_info": "PQR", 
     "data_to_plot": [["2017-05-31","413"],["2017-06-16", "773"],["2017-07-21", "941"],["2017-08-30", "493"]] 
     } 
    ] 
''' 
Verwandte Themen