【问题标题】:Output JSON file from Python. Data in JSON file messed up从 Python 输出 JSON 文件。 JSON 文件中的数据混乱
【发布时间】:2020-03-10 21:49:38
【问题描述】:

我编写了一些从 SQL 服务器输出 JSON 文件的代码,但 JSON 文件非常混乱。它重复了一些数据,非常混乱:

JSON 输出文件:

[["Name: ", "Trenton", "Age: ", "16", "Losses: ", "0"]][["Name: ", "Trenton", "Age: ", "16", "Losses: ", "0"], ["Name: ", "Max", "Age: ", "15", "Losses: ", "0"]][["Name: ", "Trenton", "Age: ", "16", "Losses: ", "0"], ["Name: ", "Max", "Age: ", "15", "Losses: ", "0"], ["Name: ", "Corbin", "Age: ", "16", "Losses: ", "0"]][["Name: ", "Trenton", "Age: ", "16", "Losses: ", "0"], ["Name: ", "Max", "Age: ", "15", "Losses: ", "0"], ["Name: ", "Corbin", "Age: ", "16", "Losses: ", "0"], ["Name: ", "TJ", "Age: ", "17", "Losses: ", "0"]][["Name: ", "Trenton", "Age: ", "16", "Losses: ", "0"], ["Name: ", "Max", "Age: ", "15", "Losses: ", "0"], ["Name: ", "Corbin", "Age: ", "16", "Losses: ", "0"], ["Name: ", "TJ", "Age: ", "17", "Losses: ", "0"], ["Name: ", "Xander", "Age: ", "16", "Losses: ", "0"]]

代码:

import psycopg2
import json

try:
    connection = psycopg2.connect(user="postgres", password="password", host="192.168.1.88", port="5432", database="losers")
    cursor = connection.cursor()
    postgreSQL_select_Query = "select * from people"

    cursor.execute(postgreSQL_select_Query)
    loss_records = cursor.fetchall()

    lossarray_list = []

    for row in loss_records:
        t = (row[0], row[1], row.[2])
        lossarray_list.append(t)
        with open('data.json', 'a') as out:
            json.dump(lossarray_list, out)


except (Exception, psycopg2.Error) as error:
    print("Error while fetching data from database", error)

finally:
    if(connection):
        cursor.close()
        connection.close()

输出应该类似于下面的链接

[{"Name: ", "Name1", "Age: ", "16", "Losses: ", "0"}],[{"Name: ", "Name2", "Age: ", "16", "Losses: ", "0"}],[{"Name: ", "Name3", "Age: ", "16", "Losses: ", "0"}],[{"Name: ", "Name4", "Age: ", "16", "Losses: ", "0"}],[{"Name: ", "Name5", "Age: ", "16", "Losses: ", "0"}]

发生了什么,我该如何解决?

【问题讨论】:

  • 不要将资源作为外部链接发布。这只会让我们更难提供帮助。
  • 不要在循环中调用json.dump()。将所有内容放在一个列表中,最后对整个内容调用json.dump()
  • 每次循环时,您都会在lossarray_list 中添加一个新行,然后将整个内容转储到 json 文件中。所以你最终会得到第一行重复 N 次,第二行重复 N-1 次,等等。
  • 小心使用except,就像你在这里一样。参见,例如:stackoverflow.com/questions/54948548/…

标签: python json formatting


【解决方案1】:

在循环结束时转储整个lossarray_list 一次,而不是每次都转储它。

    lossarray_list = [row[:3] for row in loss_records]
    with open('data.json', 'w') as out:
        json.dump(lossarray_list, out)

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多