データをヘッダ+JSON+データにするという話。@Python
2020-07-08 2020-07-09
何の話かというと、
前回、socketを流れるデータの戻しで画像のbase64を戻すけど、
他のデータも同時にもどしたいときに、
全てJSONに突っ込もうとしたのですが、
PythonのJSONって、すぐ文字列(str)に変換されちゃって面白くないので、
JSON部とデータ部を分けて返すという話です。
どうやったかって言うと、
こうです(o^^o)
#---------------------------------------------------
# 0----+----1----+----2----+
# HEAD xxxxxxxxxx DATA.......
#---------------------------------------------------
def headStream(o,dat):
ostr = json.dumps(o,separators=(',', ':'))
ostrN = len(ostr)
headN = ostrN + 16
tmp = (("HEAD " + str(headN) + " ").encode("utf-8"))[0:16]
retS = tmp + ostr.encode("utf-8") + dat
return retS
#---------------------------------------------------
def getHead(s8):
n = int(s8[5:15])
a = s8[16:n]
s = s8[n:]
o = json.loads(a)
return o,s
“HEAD”で始まって、10バイトつかってヘッダ長さを記述して、
その後にHEADのJSONくっつけて、その後にMAINのデータをくっつけるっていう、それだけです。
MEMO
#---------------------------------------------------
# 0----+----1----+----2----+
# HEAD xxxxxxxxxx DATA.......
#---------------------------------------------------
# 0 1 2 3 4 5 6 7 8 9 10 12 14 16 18 20
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# |H|E|A|D| |x|x|x|x|x|x| | | | | |J|S|O|N|*|*|*|*|*|*| | | | | | | | | | | | |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | | | | | | |
# +-------+ +-------------------+ +-------------------+ +--------------------
# SIGN HEAD LENGTH HEAD JSON MAIN DATA
# 5byte 11byte N-byte(HEAD LENGTH - 16)