在python中将字符串转换为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

我正在尝试编写一个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}
  ]
}
我试图通过运行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)