pythonjsoncsv

Python to convert CSV to JSON


I need to convert below csv file to json

cat /tmp/input.csv
ID,item,name
1,A,aname
2,A,bname
6,A,zname
8,A,xname

expected json

{
    "filters": [
  {
    "ID": “1”,
    “item”: “A”,
    "details": {
        "name": "aname"
    }
  },
  {
    "ID": “2”,
    "item": “A”,
    "details": {
        "name": "bname"
    }
  },
  {
    "ID": “6”,
    "item": “A”,
    "details": {
        "name": "zname"
    }
  },
  {
    "ID": “8”,
    "item": “A”,
    "details": {
        "name": "xname"
    }
  }
 ]
}

I tried below workaround but unable to achieve the expected output. how do include "filters" and keep "name" inside "details" which is in expected output ?

cat /tmp/input.csv| python -c 'import csv, json, sys; print(json.dumps([dict(r) for r in csv.DictReader(sys.stdin)]))'

Solution

  • First, create the outer structure:

    output = {
        "filters": [],
    }
    

    Then fill in the inner filters list with the csv items:

    with open('input.csv') as f:
        for row in csv.DictReader(f):
            subdict = {
                "ID": row["ID"],
                "item": row["item"],
                "details": {
                    "name": row["name"],
                },
            }
            output["filters"].append(subdict)