Python 将PostgreSQL格式化为JSON

Python 将PostgreSQL格式化为JSON,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我正在阅读PostgreSQL,并希望最终将其转换为一个漂亮的JSON。 PostgreSQL查询的输出包含我试图清除的“Decimal('value')”等内容。不幸的是,在这个过程中,这些值消失了,我不知道如何重新写入,使它们保持不变 代码: columns = ("parameter", "timestamp", "epoch") inputRecords = [] for row in cursor.fetchall(): inputRecords.append(dict(zip

我正在阅读PostgreSQL,并希望最终将其转换为一个漂亮的JSON。 PostgreSQL查询的输出包含我试图清除的“Decimal('value')”等内容。不幸的是,在这个过程中,这些值消失了,我不知道如何重新写入,使它们保持不变

代码:

columns = ("parameter", "timestamp", "epoch")
inputRecords = []
for row in cursor.fetchall():
    inputRecords.append(dict(zip(columns,row)))
inputRecordsCleaned = [tuple(str(item) for item in t) for t in inputRecords]
inputRecordsJson = json.dumps(inputRecordsCleaned, indent=2)
inputRecords = [{'parameter': Decimal('-0.9'), 'timestamp': datetime.datetime(2020, 3, 11, 12, 16, 48), 'epoch': 1583929008}]

inputRecordsCleaned = [('parameter', 'timestamp', 'epoch')]
inputRecordsCleaned = [('parameter': '-0.9', 'timestamp': '2020, 3, 11, 12, 16, 48', 'epoch': '1583929008')]
输出:

columns = ("parameter", "timestamp", "epoch")
inputRecords = []
for row in cursor.fetchall():
    inputRecords.append(dict(zip(columns,row)))
inputRecordsCleaned = [tuple(str(item) for item in t) for t in inputRecords]
inputRecordsJson = json.dumps(inputRecordsCleaned, indent=2)
inputRecords = [{'parameter': Decimal('-0.9'), 'timestamp': datetime.datetime(2020, 3, 11, 12, 16, 48), 'epoch': 1583929008}]

inputRecordsCleaned = [('parameter', 'timestamp', 'epoch')]
inputRecordsCleaned = [('parameter': '-0.9', 'timestamp': '2020, 3, 11, 12, 16, 48', 'epoch': '1583929008')]
预期输出:

columns = ("parameter", "timestamp", "epoch")
inputRecords = []
for row in cursor.fetchall():
    inputRecords.append(dict(zip(columns,row)))
inputRecordsCleaned = [tuple(str(item) for item in t) for t in inputRecords]
inputRecordsJson = json.dumps(inputRecordsCleaned, indent=2)
inputRecords = [{'parameter': Decimal('-0.9'), 'timestamp': datetime.datetime(2020, 3, 11, 12, 16, 48), 'epoch': 1583929008}]

inputRecordsCleaned = [('parameter', 'timestamp', 'epoch')]
inputRecordsCleaned = [('parameter': '-0.9', 'timestamp': '2020, 3, 11, 12, 16, 48', 'epoch': '1583929008')]

我认为你需要的理解是:

inputRecordsCleaned = [{k: str(v) for k,v in record.items()} for record in inputRecords]
对于给定的样本,它给出:

[{'parameter': '-0.9', 'timestamp': '2020-03-11 12:16:48', 'epoch': '1583929008'}]

我认为你需要的理解是:

inputRecordsCleaned = [{k: str(v) for k,v in record.items()} for record in inputRecords]
对于给定的样本,它给出:

[{'parameter': '-0.9', 'timestamp': '2020-03-11 12:16:48', 'epoch': '1583929008'}]

decimal.decimal
可以轻松转换为
str
s。您可以将
str
传递到
json。转储为
default
,即:

import datetime
import json
from decimal import Decimal
inputRecords = [{'parameter': Decimal('-0.9'), 'timestamp': datetime.datetime(2020, 3, 11, 12, 16, 48), 'epoch': 1583929008}]
records_json = json.dumps(inputRecords, default=str)
print(records_json)
输出:

[{"parameter": "-0.9", "timestamp": "2020-03-11 12:16:48", "epoch": 1583929008}]

decimal.decimal
可以轻松转换为
str
s。您可以将
str
传递到
json。转储为
default
,即:

import datetime
import json
from decimal import Decimal
inputRecords = [{'parameter': Decimal('-0.9'), 'timestamp': datetime.datetime(2020, 3, 11, 12, 16, 48), 'epoch': 1583929008}]
records_json = json.dumps(inputRecords, default=str)
print(records_json)
输出:

[{"parameter": "-0.9", "timestamp": "2020-03-11 12:16:48", "epoch": 1583929008}]