python - JSON 字段是包含 JSON 的字符串;如何将其转换为正确的 JSON?
问题描述
在将 CSV 文件转换为 JSON 时,我得到如下输出:
{
"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"
}
如何从setting
Python 代码中删除换行符并将字段转换为正确的列表?我的代码是:
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)
上面需要补充什么?
解决方案
该setting
字段包含一个 Json 字符串,因此您应该使用json
模块对其进行解析。当然,只有一些行包含一个 Json 字符串,而其他行只包含一个普通的,你应该在一个块中保护:json.loads
try
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)
它应该给出(或多或少):
{
"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"
}
推荐阅读
- xamarin.forms - 如何使滚动条在 ios 设备中的 xamarin 表单中始终可见并将滚动条移到屏幕左侧?
- reactjs - 如何在 Antd 中制作嵌套复选框?
- php - 反射方法::getReturnType()
- reactjs - 如何在 React-router-dom 旁边的 React.js 中放置一个 Anchor?或者有更好的方法在 react.js 中放置锚点
- qt - Qt Creator 源代码不包含在 Qt Src 中吗?
- azure - 发布页面更改时出现问题
- mongodb - 空项目symfony + mongo:试图在索引页面加载接口CommandSubscriber
- c++ - P4VS 代码镜头集成显示每个功能的所有文件级更改
- python - 如何可视化使用networkx创建的邻接矩阵
- reactjs - 标记不适用于 google-map-react