그래서 당신이 원하는 것은 "후드 아래에"일어나는 JsonProperty이 BlobProperty의 서브 클래스입니다 무엇 데이터 저장소에 저장하지만 검색에 디코딩하지 않을 때 인코딩 가져옵니다 딕셔너리를 ...해야하는 것입니다 데이터 스토어에 기록 될 때마다 (json.dumps()) 인코딩되고 읽힐 때마다 디코딩됩니다 (json.loads()). 이 기능 중 하나를 제거하는 property subclass으로 만 수행 할 수 있습니다 (그러나 엔티티가있는 상태에 따라 속성에 대해 다른 동작을하는 것이 현명하지 않다고 생각합니다). 다만 "교육 목적은"이제 당신이 그때는 JsonProperty을 사용하고 DICT를 반환하는 새 속성 메소드를 추가하는 것이 좋습니다 코드에서 DICT의 사용을해야 할 경우 다음
from google.appengine.ext import ndb
import json
class ExtendedJsonProperty(ndb.BlobProperty):
def _to_base_type(self, value):
return json.dumps(value)
def _from_base_type(self, value):
return value
# originally return json.loads(value)
class DataForBrowser(ndb.Model):
json = ExtendedJsonProperty()
data = {'a': 'A'}
data_for_browser = DataForBrowser()
data_for_browser.json = data
print type(data_for_browser.json) # returns <type 'dict'>
data_for_browser.put()
print type(data_for_browser.json) # returns <type 'str'>
data_for_browser_retrieverd = DataForBrowser.query().get()
print type(data_for_browser_retrieverd.json) # returns <type 'str'>
을 무슨 일이 일어날 지 보자에 대한 JSON으로 사용하십시오. 당신은 단지 다음 JSON 데이터를 생성하기 위해 DICT를 사용하는 경우
@property
def json_as_json(self):
return json.dumps(self.json)
그냥 BlobProperty를 사용하고
가 네, 비슷 재산에 데이터를 할당하기 전에 json.dumps() 통과 내가 지금하고있는 일. JSON 문자열을'JsonProperty'에서 간단히 반환하는 "백도어"(후크 메서드와 같은) 메서드가 있는지 궁금합니다. 'ExtendedJsonProperty'를 소개하기 위해 거꾸로가는 것 같습니다. –
데이터 저장소에서 데이터를 가져온 직후 _from_base_type() 메서드가 호출되기 때문에 이것이 가능하지 않다고 생각합니다. 이 시점부터 원래 데이터에 더 이상 액세스 할 수 없습니다. – nizz
그건 내가 원했던 대답이 아니지만 정답이라고 생각합니다. –