복붙노트

[PYTHON] JSON에서 PyMongo ObjectId를 deserialize 할 수 없습니다.

PYTHON

JSON에서 PyMongo ObjectId를 deserialize 할 수 없습니다.

겉으로보기에는 mongoDB JSON 문서를 BSON json_util로 deserialize 할 수 없습니다.

json.loads 함수는 ObjectId () 문자열을 질식합니다. MongoDB의 ObjectId 형식을 처리하고 사용 가능한 JSON으로 변환 할 수있는 json_util을 이해했습니다.

파이썬 코드 :

import json    
from bson import json_util

s = "{u'_id': ObjectId('4ed559abf047050c58000000')}"
u = json.loads(s, object_hook=json_util.object_hook)

디코더 예외가 발생합니다.

...
    u = json.loads(s, object_hook=json_util.object_hook)
  File "\python27\lib\json\__init__.py", line 339, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "\python27\lib\json\decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "\python27\lib\json\decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)

내가 놓친 게 있니?

해결법

  1. ==============================

    1.귀하의 문자열 양식을 실제로 파이썬 표현처럼 보이는 ...

    귀하의 문자열 양식을 실제로 파이썬 표현처럼 보이는 ...

    s = '{"_id": {"$oid": "4edebd262ae5e93b41000000"}}'
    u = json.loads(s, object_hook=json_util.object_hook)
    
    print u  # Result:  {u'_id': ObjectId('4edebd262ae5e93b41000000')}
    
    s = json.dumps(u, default=json_util.default)
    
    print s  # Result:  {"_id": {"$oid": "4edebd262ae5e93b41000000"}}
    

    bson.json_util.object_hook 함수는 실제 json 문자열 표현에서 ObjectId ()가 처리되는 유형을 처리하지 않습니다.

  2. ==============================

    2.여기에는 두 가지 문제가 있습니다.

    여기에는 두 가지 문제가 있습니다.

    json_util을 올바르게 사용하는 방법에 대한 예제는 @jdi의 대답을 참조하십시오.

  3. from https://stackoverflow.com/questions/8409194/unable-to-deserialize-pymongo-objectid-from-json by cc-by-sa and MIT license