在python中将字符串转换为json文件中的行
我正在尝试编写一个json文件。json文件应该如下所示-在python中将字符串转换为json文件中的行,python,json,Python,Json,我正在尝试编写一个json文件。json文件应该如下所示- { "roster":[ {"name":"Andy","age":11}, {"name":"Nathan","age":10}, {"name":"Amy","age":12} ], "links":[ {"source":1,"target":0,"value":1}, {"source":2,"target":0,"value":8}, {"source":3,"tar
{
"roster":[
{"name":"Andy","age":11},
{"name":"Nathan","age":10},
{"name":"Amy","age":12}
],
"links":[
{"source":1,"target":0,"value":1},
{"source":2,"target":0,"value":8},
{"source":3,"target":0,"value":10}
]
}
我试图通过运行for循环来创建json的花名册部分。在每次迭代中,我都试图在json文件中添加一行,如下所示-
wf = open("abc.json", "w")
wf.write('{\n"Roster":[\n')
for example in data:
name = ----some code here ----
group = ----some code here ----
wf.write('{"name":"'+name+'","group":'+group+'},\n')
我得到一个typeError-str和int对象不能连接。我明白为什么我会犯这样的错误。我只是想知道是否有更好的方法。您得到了错误:
typeError - str and int objects cannot be concatenated
因为字符串和整数不能连接
用于将整数强制转换为字符串以进行串联
wf.write('{"name":"'+name+'","group":'+str(group)+'},\n')
或者更好地继续阅读。
或者更好地阅读。Python是,意思是:
s = "foo"
s += 123
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
检查你的字符串。您必须确保
字符串
连接
尝试:
或者使用json模块
支持轻松输出json文件
import json
output = {}
output['roster'] = [
{'name':'Andy', 'age':11},
{'name': 'Nathan', 'age': 10}
]
print(json.dumps(output))
输出:
{"roster": [{"name": "Andy", "age": 11}, {"name": "Nathan", "age": 10}]}
如果您确实想手工编写json,那么绕过连接错误的方法就是将数字键入字符串:
wf.write('{"name" : "'+str(name)+'","group":'+str(group)'},\n')
在python中使用json模块绝对是明智的,它是一个非常棒的库
例如,要获取您给我们的json示例:
{
"roster":[
{"name":"Andy","age":11},
{"name":"Nathan","age":10},
{"name":"Amy","age":12}
],
"links":[
{"source":1,"target":0,"value":1},
{"source":2,"target":0,"value":8},
{"source":3,"target":0,"value":10}
]
}
您可以使用以下选项:
导入json
result = {}
result['roster'] = []
result['roster'].append({'name' : 'Andy', 'age' : 11})
result['roster'].append({'name' : 'Nathan', 'age' : 10})
result['roster'].append({'name' : 'Amy', 'age' : 12})
result['links'] = []
result['links'].append({'source' : 1, 'target' : 0, 'value' : 1})
...
(显然,您可能会在程序中使用for循环而不是手动执行此操作)。
然后,要将此python字典转换为json对象,只需使用:
json.dumps(result)
请不要手工构造JSON!使用
json
模块!这并不能向OP解释他们为什么会出错。@legostrmtropr“我理解我为什么会出错。我只是想知道是否有更好的方法。”OP不需要解释。他们需要其他选择。这个答案是另一种选择。这并不能向OP解释他们为什么会出错。OP说他们理解为什么会出错,但想知道是否有更好的方法。@orange-我在输出文件中没有得到以下问题-{“花名册”:[“{”name\:“Andy\”,“age\”:11}、“{”name\:“Nathan\,”age\“:10},\。如何去掉花括号外多余的双引号?看起来您可能还在向列表传递字符串。json模块完全处理从python字典和列表到json格式的转换。因此,如果您正在执行结果['花名册]。追加({'name:'Andy','age':11}”)如果有双引号,它只会认为它是一个字符串,而不会像字典一样对待它。如果是这样,请告诉我。是的,这就是问题所在。我应该注意到这一点。对此表示抱歉。
result = {}
result['roster'] = []
result['roster'].append({'name' : 'Andy', 'age' : 11})
result['roster'].append({'name' : 'Nathan', 'age' : 10})
result['roster'].append({'name' : 'Amy', 'age' : 12})
result['links'] = []
result['links'].append({'source' : 1, 'target' : 0, 'value' : 1})
...
json.dumps(result)