如何在Python中表示字节JSON字符串

3 投票
1 回答
1566 浏览
提问于 2025-04-18 00:16

我正在使用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 其实挺麻烦的,如果输入里有引号怎么办?使用那些可以自动处理所有特殊情况的工具总是更好,这样可以避免出错。

撰写回答