import json import csv def load_matching_data(min_scores,min_stories,min_units): array = [] with open("apartment_building_evaluation.csv", "r") as csv_file: csv_reader = csv.reader(csv_file, delimiter=",") for column in csv_reader: address = column[26] if (int(float(column[2])) >= min_stories) and (int(float(column[3]))>= min_units) and ((float(column[24]))>= min_scores): dict = {"address" : address, "score": float(column[24]), "num_stories": int(float(column[2])), "num_units": int(float(column[3]))} array.append(dict) return array result = load_matching_data(82,28,300)
I have gotten this output which is an array of dictionaries which was what I wanted
returned value: [{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}]
that I want to upload to a JSON file using this function:
def save_summary(list,string): with open('apartment_summary.json', 'w',encoding='utf-8') as outfile: json.dump(list, outfile) return outfile save_summary(results, 'apartment_summary.json')#appartment_summary.json is the name of the file.
I can already upload it to the JSON file. My question is how might I be able to upload this array to the JSON file where each dictionary in the curly brackes are printed onto different lines like this:
[ {"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466} ]
I have tried using the indent function but it produces this output.
[ { "address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337 }, { "address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336 }, { "address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463 }, { "address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483 }, { "address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500 }, { "address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369 }, { "address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493 }, { "address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388 }, { "address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369 }, { "address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496 }, { "address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575 }, { "address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406 }, { "address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342 }, { "address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319 }, { "address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466 } ]
Can someone please explain to me what I am doing wrong and how I may fix this problem?
Advertisement
Answer
You can do something like
import json result = [{"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466}] txt = ',n'.join(json.dumps(rec) for rec in result) lines = f'[n{txt}n]' with open('out.json', 'w') as f: f.write(lines)
then lines
should contain the data formatted in the way you want
out.json
after running the above:
[ {"address": "252 VICTORIA ST ", "score": 95.0, "num_stories": 37, "num_units": 337}, {"address": "320 TWEEDSMUIR AVE ", "score": 93.0, "num_stories": 30, "num_units": 336}, {"address": "570 BAY ST ", "score": 100.0, "num_stories": 29, "num_units": 463}, {"address": "77 DAVISVILLE AVE ", "score": 90.0, "num_stories": 30, "num_units": 483}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 93.0, "num_stories": 43, "num_units": 500}, {"address": "561 SHERBOURNE ST ", "score": 99.0, "num_stories": 43, "num_units": 369}, {"address": "140 ERSKINE AVE ", "score": 98.0, "num_stories": 29, "num_units": 493}, {"address": "167 CHURCH ST ", "score": 98.0, "num_stories": 28, "num_units": 388}, {"address": "22 JOHN ST ", "score": 99.0, "num_stories": 31, "num_units": 369}, {"address": "85-95 THORNCLIFFE PARK DR ", "score": 94.0, "num_stories": 43, "num_units": 496}, {"address": "45 DUNFIELD AVE ", "score": 91.0, "num_stories": 30, "num_units": 575}, {"address": "6 FOREST LANEWAY ", "score": 91.0, "num_stories": 29, "num_units": 406}, {"address": "118 BALLIOL ST ", "score": 86.0, "num_stories": 30, "num_units": 342}, {"address": "500 DUPLEX AVE ", "score": 87.0, "num_stories": 33, "num_units": 319}, {"address": "15 ROEHAMPTON AVE ", "score": 100.0, "num_stories": 36, "num_units": 466} ]