0

いくつかの 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()
4

1 に答える 1