[英]JSON field is string containing JSON; how do I convert that to proper JSON?
While converting a CSV file to JSON i am getting output like below:在将 CSV 文件转换为 JSON 时,我得到 output 如下所示:
{
"id": "8835435",
"userid": "1111",
"key": "diary_notifications",
"setting": "{\n \"standup_reminder\" : false,\n \"weight_reminder_diary\" : true,\n \"weight_reminder_notification\" : false,\n \"meal_reminders_lunch\" : false,\n \"meal_reminders_breakfast\" : false,\n \"meal_reminders_snack\" : false,\n \"weight_reminder_calendar\" : false,\n \"weight_reminder_time\" : false,\n \"meal_reminders_dinner\" : false,\n \"water_reminders\" : false,\n \"walking_reminder\" : false,\n \"sleep_reminder\" : false\n}",
"lastupdated": "2018-03-27 10:48:51",
"creatd": "2014-11-13 15:47:23"
}
How can I remove the newline characters from setting
and convert the field to a proper list in Python code?如何从
setting
中删除换行符并将字段转换为 Python 代码中的正确列表? My code is:我的代码是:
import csv
import json
with open('data.csv', 'r') as f:
reader = csv.reader(f)
next(reader)
data = []
for row in reader:
data.append({"id":row[0],"userid":row[1],"key":row[2],"setting":row[3],"lastupdated":row[4],"creatd":row[5]})
with open ("users.json","w") as f:
json.dump(data,f,indent=4)
What needs to be added above?上面需要补充什么?
The setting
field contains a Json string, so you should just parse it with the json
module. setting
字段包含 Json 字符串,因此您应该使用json
模块对其进行解析。 Of course in only some lines contain a Json string and others only contain a plain one, you should protect the json.loads
in a try
block:当然,只有某些行包含 Json 字符串,而其他行仅包含普通字符串,您应该在
try
块中保护json.loads
:
import csv
import json
with open('data.csv', 'r') as f:
reader = csv.reader(f)
next(reader)
data = []
for row in reader:
try:
row[3] = json.loads(row[3])
except json.JSONDecodeError:
pass
data.append({"id":row[0],"userid":row[1],"key":row[2],"setting":row[3],
"lastupdated":row[4],"creatd":row[5]})
with open ("users.json","w") as f:
json.dump(data,f,indent=4)
It should give (more or less):它应该给出(或多或少):
{
"id": "8835435",
"userid": "1111",
"key": "diary_notifications",
"setting": {
"standup_reminder": false,
"weight_reminder_diary": true,
"weight_reminder_notification": false,
"meal_reminders_lunch": false,
"meal_reminders_breakfast": false,
"meal_reminders_snack": false,
"weight_reminder_calendar": false,
"weight_reminder_time": false,
"meal_reminders_dinner": false,
"water_reminders": false,
"walking_reminder": false,
"sleep_reminder": false
},
"lastupdated": "2018-03-27 10:48:51",
"creatd": "2014-11-13 15:47:23"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.