データをヘッダ+JSON+データにするという話。@Python

何の話かというと、

前回、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)    

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です