【问题标题】:JSON wrong loop output in PythonPython中的JSON错误循环输出
【发布时间】:2018-04-09 01:33:16
【问题描述】:

我正在使用 JSON 格式,这个(非常简单的)代码存在一个小问题。

import json

bol = []
caus = []
num = []

idx = 0
count = [idx]
while idx < 10:
    idx += 1

    bollettini = \
        {
            'Nome bollettino': 'Bollettino ' + str(idx)
        }

    causale = \
        {
            'Causale': str(idx)
        }

    numero = \
        {
            'Numero': str(idx)
        }

    bol.append(bollettini)
    caus.append(causale)
    num.append(numero)

    data = (bol+caus+num)
    json_data = json.dumps(data)

    print(json_data)

它打印出这个:

[{"Nome bollettino": "Bollettino 1"}, {"Causale": "1"}, {"Numero": "1"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Causale": "1"}, {"Causale": "2"}, {"Numero": "1"}, {"Numero": "2"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Nome bollettino": "Bollettino 3"}, {"Causale": "1"}, {"Causale": "2"}, {"Causale": "3"}, {"Numero": "1"}, {"Numero": "2"}, {"Numero": "3"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Nome bollettino": "Bollettino 3"}, {"Nome bollettino": "Bollettino 4"}, {"Causale": "1"}, {"Causale": "2"}, {"Causale": "3"}, {"Causale": "4"}, {"Numero": "1"}, {"Numero": "2"}, {"Numero": "3"}, {"Numero": "4"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Nome bollettino": "Bollettino 3"}, {"Nome bollettino": "Bollettino 4"}, {"Nome bollettino": "Bollettino 5"}, {"Causale": "1"}, {"Causale": "2"}, {"Causale": "3"}, {"Causale": "4"}, {"Causale": "5"}, {"Numero": "1"}, {"Numero": "2"}, {"Numero": "3"}, {"Numero": "4"}, {"Numero": "5"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Nome bollettino": "Bollettino 3"}, {"Nome bollettino": "Bollettino 4"}, {"Nome bollettino": "Bollettino 5"}, {"Nome bollettino": "Bollettino 6"}, {"Causale": "1"}, {"Causale": "2"}, {"Causale": "3"}, {"Causale": "4"}, {"Causale": "5"}, {"Causale": "6"}, {"Numero": "1"}, {"Numero": "2"}, {"Numero": "3"}, {"Numero": "4"}, {"Numero": "5"}, {"Numero": "6"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Nome bollettino": "Bollettino 3"}, {"Nome bollettino": "Bollettino 4"}, {"Nome bollettino": "Bollettino 5"}, {"Nome bollettino": "Bollettino 6"}, {"Nome bollettino": "Bollettino 7"}, {"Causale": "1"}, {"Causale": "2"}, {"Causale": "3"}, {"Causale": "4"}, {"Causale": "5"}, {"Causale": "6"}, {"Causale": "7"}, {"Numero": "1"}, {"Numero": "2"}, {"Numero": "3"}, {"Numero": "4"}, {"Numero": "5"}, {"Numero": "6"}, {"Numero": "7"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Nome bollettino": "Bollettino 3"}, {"Nome bollettino": "Bollettino 4"}, {"Nome bollettino": "Bollettino 5"}, {"Nome bollettino": "Bollettino 6"}, {"Nome bollettino": "Bollettino 7"}, {"Nome bollettino": "Bollettino 8"}, {"Causale": "1"}, {"Causale": "2"}, {"Causale": "3"}, {"Causale": "4"}, {"Causale": "5"}, {"Causale": "6"}, {"Causale": "7"}, {"Causale": "8"}, {"Numero": "1"}, {"Numero": "2"}, {"Numero": "3"}, {"Numero": "4"}, {"Numero": "5"}, {"Numero": "6"}, {"Numero": "7"}, {"Numero": "8"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Nome bollettino": "Bollettino 3"}, {"Nome bollettino": "Bollettino 4"}, {"Nome bollettino": "Bollettino 5"}, {"Nome bollettino": "Bollettino 6"}, {"Nome bollettino": "Bollettino 7"}, {"Nome bollettino": "Bollettino 8"}, {"Nome bollettino": "Bollettino 9"}, {"Causale": "1"}, {"Causale": "2"}, {"Causale": "3"}, {"Causale": "4"}, {"Causale": "5"}, {"Causale": "6"}, {"Causale": "7"}, {"Causale": "8"}, {"Causale": "9"}, {"Numero": "1"}, {"Numero": "2"}, {"Numero": "3"}, {"Numero": "4"}, {"Numero": "5"}, {"Numero": "6"}, {"Numero": "7"}, {"Numero": "8"}, {"Numero": "9"}]
[{"Nome bollettino": "Bollettino 1"}, {"Nome bollettino": "Bollettino 2"}, {"Nome bollettino": "Bollettino 3"}, {"Nome bollettino": "Bollettino 4"}, {"Nome bollettino": "Bollettino 5"}, {"Nome bollettino": "Bollettino 6"}, {"Nome bollettino": "Bollettino 7"}, {"Nome bollettino": "Bollettino 8"}, {"Nome bollettino": "Bollettino 9"}, {"Nome bollettino": "Bollettino 10"}, {"Causale": "1"}, {"Causale": "2"}, {"Causale": "3"}, {"Causale": "4"}, {"Causale": "5"}, {"Causale": "6"}, {"Causale": "7"}, {"Causale": "8"}, {"Causale": "9"}, {"Causale": "10"}, {"Numero": "1"}, {"Numero": "2"}, {"Numero": "3"}, {"Numero": "4"}, {"Numero": "5"}, {"Numero": "6"}, {"Numero": "7"}, {"Numero": "8"}, {"Numero": "9"}, {"Numero": "10"}]

和我想要实现的不一样,是这样的输出:

[{"Nome bollettino": "Bollettino 1"}, {"Causale": "1"}, {"Numero": "1"}]
[{"Nome bollettino": "Bollettino 2"}, {"Causale": "2"}, {"Numero": "2"}]
[{"Nome bollettino": "Bollettino 3"}, {"Causale": "3"}, {"Numero": "3"}]
[{"Nome bollettino": "Bollettino 4"}, {"Causale": "4"}, {"Numero": "4"}]

以此类推,直到满足条件。

怎么做?

谢谢

【问题讨论】:

  • 在每个循环开始时清除 bolcausnum
  • 您附加到相同的列表而不清除它们。我想这不是故意的。
  • @aaron 你能告诉我怎么做吗?发布一些代码或告诉我在哪里修改...谢谢
  • bol = [] 和接下来的两行移动到while 循环中。

标签: python json loops


【解决方案1】:

你可以这样做:

json_data = []
idx = 0
while idx < 10:
    idx += 1

    data =[ {
            'Nome bollettino': 'Bollettino ' + str(idx)
        },
        {
            'Causale': str(idx)
        },
        {
            'Numero': str(idx)
        }]
    json_data.append(data)
print(json_data)

【讨论】:

    【解决方案2】:
    import json
    
    idx = 0
    count = [idx]
    while idx < 10:
        bol = []
        caus = []
        num = []
        idx += 1
    
        bollettini = \
            {
                'Nome bollettino': 'Bollettino ' + str(idx)
            }
    
        causale = \
            {
                'Causale': str(idx)
            }
    
        numero = \
            {
                'Numero': str(idx)
            }
    
        bol.append(bollettini)
        caus.append(causale)
        num.append(numero)
    
        data = (bol+caus+num)
        json_data = json.dumps(data)
    
        print(json_data)
    

    这应该可以。

    解决方法是要么每次清空列表bolcausnum,要么在while中初始化它们。

    【讨论】:

    • 就是这样。由于解释而被选为答案。其他答案也很好。谢谢大家。
    • 小OT:看看想要的输出结果。您知道如何从中创建单个 JSON 吗?再次感谢。
    【解决方案3】:

    这样的事情应该可以工作。只需确保将所有变量放入一个列表并将其附加到最终列表中即可。

    import json
    
    idx_range = 10
    data = []
    for idx in range(1, idx_range):
        bollettini =  {'Nome bollettino': 'Bollettino ' + str(idx)}
        causale = {'Causale': str(idx)}
        numero = {'Numero': str(idx)}
        data.append([bollettini, causale, numero])
        json_data = json.dumps(data)
        print(json_data)
    

    【讨论】:

      【解决方案4】:

      或者像这样:

      import json
      
      
      idx = 0
      count = [idx]
      data = []
      while idx < 10:
        idx += 1
      
        bollettini = {'Nome bollettino': 'Bollettino ' + str(idx) }
        causale    = {'Causale': str(idx) }
        numero =     {'Numero': str(idx)  }
      
      
        data.append([bollettini]+[causale]+[numero])
      
      json_data = json.dumps(data)
      print (json_data) #added parenthesis
      

      【讨论】:

      • 也可以...你知道如何从这个输出中创建一个 JSON 吗?
      • 这个新版本创建了一个 json 一个 2d 数组
      • 很棒的人。你是最好的。发布它here 并链接这个问题。对我来说,这是另一个问题的答案。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      相关资源
      最近更新 更多