kakaji
kakaji

Reputation: 191

CSV to json convert

I have this data in .csv format: enter image description here

I want to convert it into .json format like this :

{ 
  "title": "view3",
  "sharedWithOrganization": false,
  "sharedWithUsers": [
        "81241",
        "81242",
        "81245",
        "81265"
        ],
  "filters": [{"field":"Account ID","comparator":"==","value":"prod"}]
},
{ 
  "title": "view3",
  "sharedWithOrganization": true,
  "sharedWithUsers": [],
  "filters": [{"field":"Environment_AG","comparator":"=@","value":"Development"}]
}

Below these are the conversion for comparator

 'equals'     means  '=='
 'not equal'  means  '!='
 'contains'   means  '=@'
 'does not contain'  means '!=@'

Can you please help me convert .csv to .json I am unable to convert using python .

Upvotes: 2

Views: 255

Answers (2)

Mohit Kumar Pachaori
Mohit Kumar Pachaori

Reputation: 11

Hehere I'm posting my work on your doubt.. hope u and others will find it helpful. But I want you to try urself....

import csv
import json 

def csv_to_json(csvFilePath, jsonFilePath):
    jsonArray = []
    jsonArray2 = []
      
    with open(csvFilePath, encoding='utf-8') as csvf: 
        csvReader = csv.DictReader(csvf) 

       
        for row in csvReader: 
            if row["comparator"] == "equals":
               row["comparator"]="=="
            elif row["comparator"]=="not equal":
                 row["comparator"]="!@"
            elif row["comparator"]=="contains":
                  row["comparator"]="=@"
            elif row["comparator"]=="does not contain":
                 row["comparator"]="!=@"

            final_data={
                "title":row["title"],
                "sharedWithOrganization":bool(row["sharedWithOrganization"]),
                "sharedWithUsers": [
                row["user1"],
                row["user2"],
                row["user3"],
                row["user4"],
                row["user5"],
                row["user6"]
            ],
                "filters":[ {"field":row['field'],"comparator":row["comparator"],"value":row["value"]} ]

            }     

            jsonArray.append(final_data)
  
    with open(jsonFilePath, 'w', encoding='utf-8') as jsonf: 
        jsonString = json.dumps(jsonArray, indent=4)
        jsonf.write(jsonString)
        
csvFilePath = r'test.csv'
jsonFilePath = r'test11.json'
csv_to_json(csvFilePath, jsonFilePath)

Upvotes: 1

Clement
Clement

Reputation: 75

What I would do, without giving you the proper answer (doing it yourself is better for learning).

First : Create an Object containing your informations

class View():

def __init__(self, title, field, comparator, value, sharedWithOrganization, user1, user2, user3, user4, user5, user6):
    self.title = title
    self.field = field
    self.comparator = comparator
    self.value = value
    self.sharedWithOrganization = sharedWithOrganization
    self.user1 = user1
    ...
    self.user6 = user6

Then I would load the CSV and create an object for each line, and store them in a Dict with the following structure :

loadedCsv = { "Your line title (ex : view3)" : [List of all the object with the title view3] }

Yes, with this point of view, there is data redundancy of the title parameter, you can chose to remove it from the object.

When this is done, I would, for each title in my dictionary, get all the element I need and format them in JSON by using "import json" (c.f python documentation : https://docs.python.org/3/library/json.html)

Upvotes: 1

Related Questions