Bottom Page

Thread Rating:
  • 3 Vote(s) - 2.67 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python convert csv to json with nested array without pandas
#1
I'm trying to insert new array inside the array but I'm not sure where can I append the data.

Csv table

date, id, description, name, code
2016-07-01, S56202, Class A, Jacky, 300-E003

Currently, my result is

    "date": "2016-07-01",
    "id": "S56202",
    "items": [{"description": "Class A",
         "code": "300-E003",
         "name": "Jacky"},
Here is my code
    import csv
    import json
    from itertools import groupby

    with open('student.csv', 'r') as csv_ledger:
        r = csv.DictReader(csv_ledger)
        data = [dict(d) for d in r]

        groups = []

        for k, g in groupby(data, lambda r: (r['id'], r['date'])):
            groups.append({"date": k[1],
                           "id": k[0],
                           "items": [{k: v for k, v in d.items() if k not in 
                                    ['ref_num', 'date']} for d in list(g)]})
I need to insert another array in items then add the email, code and name into the new array.

Expected result

    "items": [{"description": "Class A",
               "new_account": {"email": "abc@hotmail.com",
                               "code": "300-E003",
                               "name": "Jacky"}}]

Quote
#2
I tried to run your code, planning to tinker with it to try to get a solution, but got an error:
Error:
Traceback (most recent call last): File "testit.py", line 11, in <module> for k, g in groupby(data, lambda r: (r['id'], r['date'])): File "testit.py", line 11, in <lambda> for k, g in groupby(data, lambda r: (r['id'], r['date'])): KeyError: 'id'
Quote
#3
Thanks for your reply. The 'id' must exactly same with the header in csv. It's case sensitive.
I updated the content

date, ref_num, description,debit,credit,coa_code, coa_name
2018-12-28, PV18/12/066, Jacky , ,59.80,310-1000, Samboi

import csv
import json
from itertools import groupby

with open('testing.csv', 'r') as csv_ledger:
    r = csv.DictReader(csv_ledger)
    data = [dict(d) for d in r]

    groups = []

    for k, g in groupby(data, lambda r: (r['ref_num'], r['date'])):
        groups.append({
            "date": k[1],
            "ref_num": k[0],
            "items": [{k: v for k, v in d.items() if k not in ['ref_num', 'date']} for d in list(g)]
        })

print(json.dumps(groups[:10], indent=4))
Output result
"date": "2018-12-28",
        "ref_num": "PV18/12/066",
        "items": [
            {
                "description": "Jacky",
                "debit": "",
                "credit": "59.80",
                "coa_code": "310-1000",
                "coa_name": "Samboi"
            },
Expected Result
"date": "2018-12-28",
        "ref_num": "PV18/12/066",
        "items": [
            {
                "description": "SHARMINI SHANKAR",
                "debit": "",
                "credit": "59.80",
                "new_of_account": {
                                    "id": "1",
                                    "coa_code": "310-1000",
                                    "coa_name": "samboi"
                                  }
            },
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  help with flatten nested list Arch2030 1 36 Yesterday, 04:39 PM
Last Post: ichabod801
  convert a string into an int in Python anjita 2 98 Jan-18-2019, 10:37 AM
Last Post: sandeepatel
  Convert Python 2 to 3 syntax issue OscarBoots 10 245 Jan-08-2019, 09:19 AM
Last Post: OscarBoots
  json.load() in Python 3 jazmad 1 125 Dec-31-2018, 11:19 PM
Last Post: Larz60+
  Python - create JSON output dragan979 1 115 Dec-28-2018, 12:20 PM
Last Post: dragan979
  Working on nested functions boxerboy1168 2 183 Dec-28-2018, 07:54 AM
Last Post: Gribouillis
  Looping and nested loops albry 5 152 Dec-20-2018, 12:10 PM
Last Post: buran
  Issue with a script to convert xls to json Will86 2 147 Dec-19-2018, 08:23 AM
Last Post: Will86
  how to create a nested dict.. wardancer84 5 331 Nov-23-2018, 04:01 AM
Last Post: Larz60+
  Nested Imports CanadaGuy 4 196 Nov-08-2018, 12:20 AM
Last Post: CanadaGuy

Forum Jump:


Users browsing this thread: 1 Guest(s)