いくつかの JSON データが入ってきて、ほとんど機能しています。問題は、レコード内にレコードがあり、エンコードとデコードのために、そのデータをいくつかの Python クラス内に適切にラップしたいことです。
ネストされた JSON データを文字列としてラップすると機能しますが、不適切な JSON のように見えるため、実際にはこれを実行したくありません。
例 (動作しますが、好きではありません)
{"eventData": "{\"itemName\": \"Dflt\"}", "pID": 1}
例(使いたいデータ)
{"eventData": {\"itemName\": \"Dflt\"}, "pID": 1}
サブデータを「引用符」で囲む必要がないようにコードを変更するにはどうすればよいですか
import json
from copy import deepcopy
class Event(object):
__slots__= 'itemName'
def __init__(self, itemName):
self.itemName = itemName
def encode(self):
obj = {}
obj['itemName'] = str(self.itemName)
return json.dumps(obj)
def decode(self, json_Str):
obj = json.loads(json_Str)
self.itemName = obj['itemName']
class EventPacket(object):
__slots__= 'pID', 'eventData'
def __init__(self, pID, eventData):
self.pID = pID
self.eventData = eventData
def encode(self):
obj = {}
obj['pID'] = int(self.pID)
obj['eventData'] = self.eventData.encode()
return json.dumps(obj)
def decode(self, json_Str):
obj = json.loads(json_Str)
self.pID = obj['pID']
self.eventData = obj['eventData']
defaultEvent = Event('Dflt')
defaultPacket = EventPacket(1, defaultEvent)
packet = deepcopy(defaultPacket)
print 'packet : ', packet.encode()
tempStr = '{"eventData": "{\\"itemName\\": \\"test\\"}", "pID": 2}'
packet.decode(tempStr)
print 'packet : ', packet.encode()
#desired string format
tempStr2 = '{"eventData": {\"itemName\": \"test2\"}, "pID": 3}'
packet.decode(tempStr2)
print 'packet : ', packet.encode()