JSON 시리즈화 Mongodb
나는 mongodb 데이터베이스에서 데이터를 검색하기 위해 pymongo package를 사용하고 있습니다.
>>> r = collection.find() # returns an object of class 'Cursor'
그런 다음 목록으로 변환합니다.
>>> l = list(r) # returns a 'list' of 'dict'
print(l)가 반환하는 내용은 다음과 같습니다.
>>> [{u'date': datetime.datetime(2009, 11, 10, 10, 45), u'_id': 1, u'name': u'name1', u'value': 11},{u'date': datetime.datetime(2013, 11, 10, 10, 45), u'_id': 2, u'name': u'name2', u'value': 22}]
이제 JSON으로 변환해야 조작할 수 있습니다.
>>> json.dumps(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2009, 11, 12, 11, 14) is not JSON serializable
저는 또한 http://api.mongodb.org/python/1.7/api/pymongo/json_util.html 을 팔로우하려고 노력했지만 성공하지 못했습니다.편집: 링크의 최신 버전은 http://api.mongodb.org/python/current/api/bson/json_util.html 입니다.
>>> json.dumps(l, default=json_util.default)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'json_util' is not defined
참고: 정확히 나는 R 패키지 python과 그 함수 rPython::python.get("l")을 사용하여 이 결과를 R에 푸시해야 합니다.
측면 질문:딕트 목록에서 각 필드 앞의 u(u'Date', u'name' 등)는 무엇입니까?
당신이 지적한 피몬고 문서는 구식입니다.버전 1.7을 사용하는 경우 업데이트를 권장합니다.최신 버전에서는 다음 작업을 수행할 수 있습니다.
from bson.json_util import dumps
dumps(l)
https://pymongo.readthedocs.io/en/stable/api/bson/json_util.html
사이드 답변:u'name'
,u'date'
,u'_id'
등은 데이터베이스에 있는 문서의 필드 이름입니다.
from bson import json_util
json.dumps(result,default=json_util.default)
내 상황에서, 이 오류는 플라스크의 mongo DBid 객체 때문에 발생합니다. 당신이 해야 할 일은 id를 변환하는 것입니다(참고: id 변환이 필요하다면 그것도 팝할 수 있습니다). 저는 이것이 누군가에게 도움이 되기를 바라는 제 솔루션을 공유하고 있습니다.
from flask import jsonify
def get_data(self,data):
data['_id'] = str(data['_id'])
return data
app = Flask(__name__)
@app.route('/')
def apimethod():
temp = [self.get_data(i) for i in self.collection.find()]
return jsonify(temp)
또한 피몽고의 덤프는 많은 도움이 되지 않습니다.
from bson.json_util import dumps,loads
왜냐하면 그것은 API를 만들기 위해 내 상황에서 예상되었던 dict 대신 문자열을 반환하고 있기 때문이고 만약 내가 덤프를 했다면 나는 다시 로드해야 합니다.
이 실이 도움이 되었습니다 - 감사합니다.
JSON을 JSON/Dictionary Object로 되돌리기 위한 최종 솔루션을 공유하고 싶었습니다. (예를 들어)
from bson.json_util import dumps, loads
r = collection.find()
l = list(r) # Converts object to list
d = dumps(l) # Converts to String
dict_needed = loads(d[0]) # Serializes String and creates dictionary
이제 JSON이 사전 개체에 있으며 필요에 따라 편집할 수 있습니다.
저도 같은 문제에 직면해 있었고, 문서를 사전으로 변환하는 코드를 작성했습니다.당신은 그것을 참고할 수 있습니다.find_one()에서 얻은 개체를 문서로 전달합니다.ToJson() 메서드 및 find()를 문서로 변환한 결과Json에게. Json이라는 이름에 유형이 있는데, 대신 코드가 Json이 아닌 Dict로 변환됩니다.
from bson.json_util import dumps
class UtilService:
def __init__(self):
pass
@staticmethod
def pinCodeParser(path):
location = {}
f = open(path)
for line in f:
words = line.split()
location[words[1]] = (words[-3],words[-2])
return location
@staticmethod
def listHelper(str):
s = []
str = str.split(',')
for e in str:
s.append(e.replace("[","").replace("]",""))
return s
@staticmethod
def parseList(str):
if ',' in str:
return UtilService.listHelper(str)
return str
@staticmethod
def trimStr(str):
return str.replace('"','')
@staticmethod
def documentToJson(document):
document = eval(dumps(document))
mp = {}
for key, value in document.iteritems():
if "_id" in key:
mp["id"] = str(value["$oid"])
else:
mp[ UtilService.trimStr(key) ] = UtilService.parseList( value )
return mp
@staticmethod
def convertDocumentsToJson(documents):
result = []
for document in documents:
result.append(UtilService.documentToJson(document))
return result
언급URL : https://stackoverflow.com/questions/19674311/json-serializing-mongodb
'programing' 카테고리의 다른 글
다른 도메인의 다른 페이지에 PHP 페이지의 div 로드 (0) | 2023.06.22 |
---|---|
스프링 데이터레스트 - 지원되는 작동을 제한할 수 있는 방법이 있습니까? (0) | 2023.06.22 |
아이폰의 반환 키를 키보드가 사라지게 만드는 방법은 무엇입니까? (0) | 2023.06.22 |
GCC의 정렬된 malloc()? (0) | 2023.06.22 |
시계열 데이터베이스로서의 MongoDB (0) | 2023.06.22 |