如何在Python中表示字节JSON字符串
我正在使用Python和Zookeeper,因为我在Python中使用了kazoo库。这个问题主要和Python有关,不是关于Zookeeper或kazoo库的。
下面是我定义的两个变量 -
new_error_str = "Error occurred on machine %s in datacenter %s on the %s of process %s" % (host_info, local_dc, step, process_name)
new_error_key = "error_%s" % (timestamp_in_ms)
现在我需要用这两个变量来创建一个字节格式的JSON字符串,然后把这个JSON字符串作为数据写入Zookeeper的节点。下面是创建节点并写入数据的语法 -
zk.create(date_znode_path, b'{"'+new_error_key+'":"' + new_error_str + '"}', None, True)
不过,上面的代码出现了一个异常,错误信息是 -
TypeError: value must be a byte string
你们觉得我哪里做错了?我想把上面的变量转换成一个JSON字符串。
这里有关于 kazoo库 的详细信息。
更新:
如果我使用这个语法,就能正常工作 -
b'{"hostname":"' + get_hostname() + '"}', None, True)
我可以看到数据是这样的 -
{"hostname":"machineA"}
1 个回答
2
你应该使用 json 模块:
import json
zk.create(date_znode_path, json.dumps({new_error_key : new_error_str}, ensure_ascii=True), None, True)
手动构建 json 其实挺麻烦的,如果输入里有引号怎么办?使用那些可以自动处理所有特殊情况的工具总是更好,这样可以避免出错。