I am converting.csv to JSON but the strings are not in a array form, and I need them to be inside an array.
Code I use to convert.csv to JSON:
def import_passwords(self):
options = QFileDialog.Options()
fileName, _ = QFileDialog.getOpenFileName(self,"Passwords", "Passwords","Excel File (*.csv)", options=options)
if fileName:
print(fileName)
csvfile = open(fileName, 'r')
jsonfile = open(password_dir + 'passwords.json', 'w')
fieldnames = ("site name","username","password")
reader = csv.DictReader(csvfile, fieldnames)
out = json.dumps([row for row in reader])
# out = out.replace("\\", '')
# jsonfile.write(out)
# with open(password_dir + 'passwords.json', mode='w+', encoding='utf-8') as file:
# json.dump(out, file)
# with open(password_dir + 'passwords.json') as file:
passwords_json = json.loads(out)
# sort json file
sorted_obj = sorted(passwords_json, key=lambda x : x['site name'], reverse=False)
# Write to passwords file
with open(password_dir + 'passwords.json', mode='w+', encoding='utf-8') as file:
json.dump(sorted_obj, file, ensure_ascii=True, indent=4, sort_keys=True, separators=(',', ': '))
I have no idea how I would convert them in a efficient way.
What I get:
[
{
"password": "asd",
"site name": "asd",
"username": "asd"
},
{
"password": "asd",
"site name": "asdasd",
"username": "asd"
},
{
"password": "asd",
"site name": "asdasdasd",
"username": "asd"
}
]
What I want:
[
{
"password": ["asd"],
"site name": ["asd"],
"username": ["asd"]
},
{
"password": ["asd"],
"site name": ["asdasd"],
"username": ["asd"]
},
{
"password": ["asd"],
"site name": ["asdasdasd"],
"username": ["asd"]
}
]
I get the as string, and I want array.
you can just do it:
data = [
{
"password": "asd",
"site name": "asd",
"username": "asd"
},
{
"password": "asd",
"site name": "asdasd",
"username": "asd"
},
{
"password": "asd",
"site name": "asdasdasd",
"username": "asd"
}
]
for dic in data:
for key in dic.keys():
dic[key] = [dic[key]]
or use list comprehension:
data = [{k: [v] for k,v in d.items()} for d in data]
output:
[{'password': ['asd'], 'site name': ['asd'], 'username': ['asd']}, {'password': ['asd'], 'site name': ['asdasd'], 'username': ['asd']}, {'password': ['asd'], 'site name': ['asdasdasd'], 'username': ['asd']}]
You can loop over the objects in data
and convert all of the values to lists:
data = [
{
"password": "asd",
"site name": "asd",
"username": "asd"
},
{
"password": "asd",
"site name": "asdasd",
"username": "asd"
},
{
"password": "asd",
"site name": "asdasdasd",
"username": "asd"
}
]
for x in data:
for k in x.keys():
x[k] = [x[k]]
Output:
[
{
'password': ['asd'],
'site name': ['asd'],
'username': ['asd']
},
{
'password': ['asd'],
'site name': ['asdasd'],
'username': ['asd']
},
{
'password': ['asd'],
'site name': ['asdasdasd'],
'username': ['asd']
}
]
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.