当前位置: 首页 > 面试题库 >

如何在Python中合并两个json字符串?

石思淼
2023-03-14
问题内容

我最近开始使用Python,并且尝试将我的JSON字符串之一与现有JSON字符串连接在一起。我也在与Zookeeper一起工作,所以当我使用Python
kazoo库时,我从zookeeper节点获取了现有的json字符串。

# gets the data from zookeeper
data, stat = zk.get(some_znode_path)
jsonStringA = data.decode("utf-8")

如果我打印,jsonStringA它会给我这样的感觉-

{"error_1395946244342":"valueA","error_1395952003":"valueB"}

但是,如果我这样做,print json.loads(jsonString)它会像这样打印出来-

{u'error_1395946244342': u'valueA', u'error_1395952003': u'valueB'}

这里jsonStringA将有我现有的JSON字符串。现在我有另一个键值对,我需要在出口添加jsonStringA-

以下是我的Python代码-

# gets the data from zookeeper
data, stat = zk.get(some_znode_path)
jsonStringA = data.decode("utf-8")

timestamp_in_ms = "error_"+str(int(round(time.time() * 1000)))
node = "/pp/tf/test/v1"
a,b,c,d = node.split("/")[1:]
host_info = "h1"
local_dc = "dc3"
step = "step2"

jsonStringA从Zookeeper提取后,我的现有状态将如下所示:

{"error_1395946244342":"valueA","error_1395952003":"valueB"}

现在,我需要将此键值对添加到jsonStringA-

"timestamp_in_ms":"Error Occured on machine "+host_info+" in datacenter "+ local_dc +" on the "+ step +" of process "+ c +"

简而言之,我需要合并以下键值对-

"error_1395952167":"Error Occured on machine h1 in datacenter dc3 on the step2 of process test"

因此,最终的JSON字符串将如下所示-

{"error_1395946244342":"valueA","error_1395952003":"valueB","error_1395952167":"Error Occured on machine h1 in datacenter dc3 on the step2 of process test"}

这可能吗?


问题答案:

假设a和b是要合并的字典:

c = {key: value for (key, value) in (a.items() + b.items())}

要将字符串转换为python字典,请使用以下命令:

import json
my_dict = json.loads(json_str)

更新:使用 字符串的 完整代码:

# test cases for jsonStringA and jsonStringB according to your data input
jsonStringA = '{"error_1395946244342":"valueA","error_1395952003":"valueB"}'
jsonStringB = '{"error_%d":"Error Occured on machine %s in datacenter %s on the %s of process %s"}' % (timestamp_number, host_info, local_dc, step, c)

# now we have two json STRINGS
import json
dictA = json.loads(jsonStringA)
dictB = json.loads(jsonStringB)

merged_dict = {key: value for (key, value) in (dictA.items() + dictB.items())}

# string dump of the merged dict
jsonString_merged = json.dumps(merged_dict)

但是我不得不说,总的来说,您尝试做的并不是最佳实践。请阅读有关python词典的内容。

替代解决方案:

jsonStringA = get_my_value_as_string_from_somewhere()
errors_dict = json.loads(jsonStringA)

new_error_str = "Error Ocurred in datacenter %s blah for step %s blah" % (datacenter, step)
new_error_key = "error_%d" % (timestamp_number)

errors_dict[new_error_key] = new_error_str

# and if I want to export it somewhere I use the following
write_my_dict_to_a_file_as_string(json.dumps(errors_dict))

实际上,如果仅使用数组来保存所有错误,则可以避免所有这些情况。



 类似资料:
  • 本文向大家介绍如何在Java中使用JsonParserSequence顺序合并两个JSON字符串?,包括了如何在Java中使用JsonParserSequence顺序合并两个JSON字符串?的使用技巧和注意事项,需要的朋友参考一下 JsonParserSequence 是一个 可被用于创建包含两个子解析器放置在解析器辅助类 特定序列。我们可以创建一个使用序列静态 方法)createFlattene

  • 下面是我的代码,我希望输出为“afbgchde”,而不是“abcdefgh”,但最终会出现索引外错误,希望有更好的方法来实现这一点。。请帮忙。。!!

  • 问题内容: 我有两个json 第一个是 第二个是 我想合并它们并有一个像 有没有办法合并它们?如果需要在JSON中更改结构,对我来说也可以 谢谢。 问题答案: 像应该工作。 官方PHP文档中的 array_merge 官方PHP文档中的 json_decode 编辑: 尝试将第二个参数添加到json_decode。这样会将对象转换为关联数组。

  • 问题内容: 我有两个Python字典,我想编写一个返回这两个字典合并的单个表达式。该方法将是我需要的,如果它返回了结果而不是就地修改。 我怎样才能在最终的合并字典,不是? (更清楚地说,我正在寻找的最后一个胜出的冲突处理方法也是如此。) 问题答案: 对于字典和,变成了浅层合并的字典,带有替换的值。 在Python 3.5或更高版本中: 在Python 2(或3.4或更低版本)中,编写一个函数: 现

  • 我一直在为我的服务器做一个非常简单的bukkit插件,只是为了个人使用。我做了一个叫播放器的命令,当某人有权限(broadcaster.players)时,它会显示服务器播放器的列表。我还想让它在游戏中显示玩家的游戏模式。但是我不知道如何把它们放在一起。 我的代码: 如果它说,我想在同一行上显示游戏模式。 当然,这从来没有工作过,我不知道该怎么办,有人能给我建议我能做什么吗,我的代码很混乱,但我是

  • 我在一秒钟内通过蓝牙从远程设备接收到两个字符串。(第一个字符串,然后在几毫秒后是第二个字符串)。例如: 和 我应该如何以及在哪里存储我的第一个字符串,等待下一个字符串,然后像头块一样组合这两个字符串?有什么建议吗。