如何在python中处理这个字符串

时间:2015-03-16 06:09:14

标签: python json

我接受来自websocket的一些二进制数据。

我正在尝试json.loads(data),但我得到ValueError抛出

打印它我得到以下结果(这是有效的json):

{"session":"SeFKQ0SfYZqhh6FTCcKZGw==","authenticate":1,"id":1791}

但是当我进一步检查字符串时,print将这个怪物变成了上面的json:

'{\x00"\x00s\x00e\x00s\x00s\x00i\x00o\x00n\x00"\x00:\x00"\x00S\x00e
\x00F\x00K\x00Q\x000\x00S\x00f\x00Y\x00Z\x00q\x00h\x00h\x006\x00F
\x00T\x00C\x00c\x00K\x00Z\x00G\x00w\x00=\x00=\x00"\x00,\x00"\x00a
\x00u\x00t\x00h\x00e\x00n\x00t\x00i\x00c\x00a\x00t\x00e\x00"\x00:
\x001\x00,\x00"\x00t\x00h\x00r\x00e\x00a\x00d\x00_\x00i\x00d\x00"
\x00:\x001\x007\x009\x001\x00}\x00'

这是什么回来,我怎样才能做一些有意义的事情(通过json.loads将其变成原生字典)?

1 个答案:

答案 0 :(得分:5)

您的数据似乎是UTF-16编码,小端,没有BOM(字节顺序标记)。

我会先尝试用utf16-le解码器解码它:

data = data.decode('utf-16le')

然后使用json.loads(data)加载它。

data = '{\x00"\x00s\x00e\x00s\x00s\x00i\x00o\x00n\x00"\x00:\x00"\x00S\x00e\x00F\x00K\x00Q\x000\x00S\x00f\x00Y\x00Z\x00q\x00h\x00h\x006\x00F\x00T\x00C\x00c\x00K\x00Z\x00G\x00w\x00=\x00=\x00"\x00,\x00"\x00a\x00u\x00t\x00h\x00e\x00n\x00t\x00i\x00c\x00a\x00t\x00e\x00"\x00:\x001\x00,\x00"\x00t\x00h\x00r\x00e\x00a\x00d\x00_\x00i\x00d\x00"\x00:\x001\x007\x009\x001\x00}\x00'
data = data.decode('utf16-le')
print json.loads(data)

输出:

{u'thread_id': 1791, u'session': u'SeFKQ0SfYZqhh6FTCcKZGw==', u'authenticate': 1}