在Python中的JSON字符串中添加变量值

时间:2013-12-25 22:14:28

标签: python json

我很困惑为什么这不起作用。我正在尝试在JSON中添加我的变量值,每次添加它时,它都没有在我的JSON字符串中正确显示。

hostname = "machineA.host.com"

我需要将以上主机名信息添加到下面的JSON文档中 -

b"{\"Machine Name\":\"\"+hostname+\"\"}", None, True)

但是每当我以上述方式添加它时,它根本就不起作用。

不确定我在这里做错了什么?

2 个答案:

答案 0 :(得分:13)

您正在转义字符串中的内部双引号"。它应该是:

b"{\"Machine Name\":\""+hostname+"\"}", None, True)

在python中,您还可以对字符串使用单引号' - 并且您不需要在单引号字符串中转义双引号

b'{"Machine Name":"'+hostname+'"}', None, True)

有两种更好的方法可以做到这一点。第一种是字符串格式化,它将变量插入到字符串中:

b'{"Machine Name":"%s"}' % hostname # python 2.x (old way)
b'{{"Machine Name":"{0}"}}'.format(hostname) # python >= 2.6 (new way - note the double braces at the ends)

下一步是使用Python JSON模块将python dict转换为JSON字符串

>>> hostname = "machineA.host.com"
>>> data = {'Machine Name': hostname}
>>> json.dumps(data)
'{"Machine Name": "machineA.host.com"}'

这可能是首选方法,因为它将处理主机名和其他字段中的转义怪异字符,确保最后有有效的JSON。

是否有理由使用bytestring

答案 1 :(得分:2)

而不是操纵字符串考虑将数据作为python结构,然后将其转储到json

>>> d = {}
>>> d['Machine Name'] = hostname
>>> json.dumps(d)
'{"Machine Name": "machineA.host.com"}'