将python dict转换为json二进制字符串的最快方法

将python dict转换为json二进制字符串的最快方法,python,json,ujson,Python,Json,Ujson,我需要将这个python dict转换成二进制json d = {'1': 'myval', '2': 'myval2'} json_binary_str = b'{"1": "myval", "2": "myval2"}' 在python 3中,我有以下内容: import ujson ujson.dumps(d) 但是,这不会创建二进制字符串。 如何实现这一点?如果需要将JSON转换为二进制,则需要使用dumps()将其转换为字符串,然后可以将其转换为二进制,如

我需要将这个python dict转换成二进制json

   d = {'1': 'myval', '2': 'myval2'}

   json_binary_str = b'{"1": "myval", "2": "myval2"}'
在python 3中,我有以下内容:

   import ujson
   ujson.dumps(d)
但是,这不会创建二进制字符串。
如何实现这一点?

如果需要将JSON转换为二进制,则需要使用
dumps()
将其转换为字符串,然后可以将其转换为二进制,如下所示

  import json

if __name__ == '__main__':
    sent_data = {'1': 'myval', '2': 'myval2'}
    dumped_json_string = json.dumps(sent_data)
    binary_data = ' '.join(format(ord(letter), 'b') for letter in dumped_json_string)
    print binary_data

    jsn = ''.join(chr(int(x, 2)) for x in binary_data.split())
    received_data = json.loads(jsn)
    print received_data
二进制_数据的输出为

1111011 100010 110001 100010 111010 100000 100010 1101101 1111001 1110110 1100001 1101100 100010 101100 100000 100010 110010 100010 111010 100000 100010 1101101 1111001 1110110 1100001 1101100 110010 100010 1111101
接收到的_数据的输出为

{u'1': u'myval', u'2': u'myval2'}
希望有帮助

在RFC中,它说:

JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32
乍一看,当您第一次看到这一点时,Python似乎并没有真正遵循规范。毕竟,当它仍然是Python3“str”字符串时,对它进行编码意味着什么,然而Python仍然在为您进行编码。试试这个:

>>> json.dumps({"Japan":"日本"})
'{"Japan": "\\u65e5\\u672c"}'
您可以看到,日本人已经转换为unicode转义,结果字符串实际上是ASCII,即使它仍然是Python str。我不确定如何让json.dumps()实际为您提供utf-8序列-出于互操作性目的-如果您需要,但对于所有实际目的,这对大多数人来说已经足够好了。字符在那里,将被正确解释。使用以下工具很容易获得二进制文件:

>>> json.dumps({"Japan":"日本"}).encode("ascii")
b'{"Japan": "\\u65e5\\u672c"}'
python在重新加载时做了正确的事情:

>>> json.loads(json.dumps({"Japan":"日本"}).encode("ascii"))
{'Japan': '日本'}
但是,如果您根本不费心编码,loads()仍然会在给定str时确定要做什么:

>>> json.loads(json.dumps({"Japan":"日本"}))
{'Japan': '日本'}
Python一如既往地试图尽可能地帮助您了解自己想要什么和做什么,但这让那些深入研究Python的人感到困惑,尽管我非常喜欢Python,但我还是同情OP。这种“有帮助”的行为是否值得困惑,这是一场将持续不断的争论

值得注意的是,如果下一步要对输出执行的操作是写入文件,那么您只需执行以下操作:

pathlib.Path("myfile.json").open("w").write(json_data)

那么您就不需要它是二进制的,因为文件是以文本模式打开的,编码是为您完成的。

JSON字符串是文本。如果你想编码,那是你的事。这个怎么样?字节(json.dumps(d),encoding='utf-8')
json.dumps(d).encode()
code在python 3中不起作用。那么字节()呢?字节()的用法呢?我不明白你的意思,你想怎么做?你能解释一下我们可以使用字节吗(mystring'utf-8')