python - 试图将两个 json 数据放入 python 列表但收到错误消息
问题描述
我正在使用 pymongo 从 MongoDB 数据库中获取数据,然后将光标转换为 JSON 并获取特定数据。
JSON数据格式,detailed_data
:
[{'Column 0': 13.57557,
'Column 1': 12.656892,
'Column 2': -1.424328,
'Column 3': -2.302774,
'Column 4': 404.9216},
{'Column 0': 13.844373,
'Column 1': 12.61062,
'Column 2': -1.435429,
'Column 3': -1.964423,
'Column 4': 404.97818},
{'Column 0': 13.996934,
'Column 1': 12.669785,
'Column 2': -1.384147,
'Column 3': -1.830788,
'Column 4': 405.187378},
{'Column 0': 14.060876,
'Column 1': 12.755087,
'Column 2': -1.378407,
'Column 3': -2.02023,
'Column 4': 404.892548},
{'Column 0': 14.095317,
'Column 1': 12.877163,
'Column 2': -1.363435,
'Column 3': -2.072163,
'Column 4': 404.698822}]
JSON数据格式;结果
[{'_id': ObjectId('606702b2b1e51ef27782dcf5'),
'FileName': 'ex.csv',
'BriefInfo': '',
'Size': '193.9KB',
'UserName': '12795757',
'data': [{'Column 0': 13.57557,
'Column 1': 12.656892,
'Column 2': -1.424328,
'Column 3': -2.302774,
'Column 4': 404.9216},
{'Column 0': 13.844373,
'Column 1': 12.61062,
'Column 2': -1.435429,
'Column 3': -1.964423,
'Column 4': 404.97818},
{'Column 0': 13.996934,
'Column 1': 12.669785,
'Column 2': -1.384147,
'Column 3': -1.830788,
'Column 4': 405.187378},
{'Column 0': 14.060876,
'Column 1': 12.755087,
'Column 2': -1.378407,
'Column 3': -2.02023,
'Column 4': 404.892548},
{'Column 0': 14.095317,
'Column 1': 12.877163,
'Column 2': -1.363435,
'Column 3': -2.072163,
'Column 4': 404.698822}]
这是代码:我正在尝试将详细数据和结果放入 python 列表,然后再次将其转换为 JSON。但我收到一个错误:
ObjectId 类型的对象不是 JSON 可序列化的
为什么会发生这个错误?
import json
import pymongo
from bson.json_util import dumps
from bson.json_util import loads
import random
import pandas as pd
import numpy as np
import csv
client = pymongo.MongoClient('username:password')
db = client.datasets
result = db.files.find({"FileName":"ex.csv","UserName":"12795757"})
result = loads(dumps(result))
detailed_data = result[0]["data"]
json.dumps([detailed_data, result])
解决方案
您应该使用 json.encode(result, cls=JSONEncoder)
,因为 mongodb 结果包含其他元数据以及结果。即它看起来像 JSON,但它不是 JSON。
推荐阅读
- vue.js - 使用带有插槽的 Vue 组件包装 DOM-Element 创建外部库
- google-apps-script - 在谷歌脚本中的单个谷歌表格中收集谷歌表单结果
- omnet++ - 如何在 VEINS 中呈现 SUMO 中的那些红绿灯?
- python - 如何确定 `TypeError: unsupported operand type(s) for /: 'float' and 'list'`的原因
- android - 在约束视图中为 imageView 设置 minHeight 不起作用
- docker - 带有 Letsencrypt 的 Traefik V2.0 无法为域生成证书
- kotlin - 访问 Kotlin 字段而不运行它的 getter
- javascript - 如何同步 SVG SMIL 动画?
- python-3.x - 清除气流任务导致 TypeError 错误(蘑菇云):无法腌制 SSLContext 对象
- c# - 代码高效的多条目参数 SQL 插入:C#