1

I am playing with JSON format and there is a small problem with this (very simple) code.

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)

It prints out this:

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

It is different from what I want to achieve, which is this kind of output:

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

and so on until the condition is satisfied.

How to do it ?

Thanks

4
  • 1
    Clear bol, caus, num at the start of each loop. Commented Oct 27, 2017 at 12:37
  • 1
    You append to the same lists without clearing them. I suppose it's not intended. Commented Oct 27, 2017 at 12:38
  • @aaron can you tell me how ? post some code or show me where to modify...thanks Commented Oct 27, 2017 at 12:39
  • 1
    Move bol = [] and the next 2 lines into the while loop. Commented Oct 27, 2017 at 12:42

4 Answers 4

3

You can do it like below:

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)
Sign up to request clarification or add additional context in comments.

Comments

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)

This should do.

The solution is either to empty the list bol, caus and num each time, or initialise them within the while.

2 Comments

That's it. Selected as answer because of the explanation. Also the other answers are good. Thanks guys.
Little OT: look at the desired output result. Do you know how to create a single JSON from it ? Thanks again.
1

Something like this should work. Just make sure you put all of your variables into a list and append that to your final list of lists.

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)

Comments

1

Or like this:

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

3 Comments

works too... Do you know how to create, from this output, a single JSON ?
this new version creates a single json a 2d array
Awesome man. You're the best. Post it here and link also this question. For me it's the answer of the other question. Thanks

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.