我正在尝试编写一个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对象无法连接。我理解为什么我会收到这个错误。我只是想知道是否有更好的方法来做到这一点。
答案 0 :(得分:0)
您收到错误:
typeError - str and int objects cannot be concatenated
因为字符串和整数不能连接。
使用str()
将整数强制转换为字符串以进行连接。
wf.write('{"name":"'+name+'","group":'+str(group)+'},\n')
甚至可以更好地阅读string formatting in Python。
或者更好的读者可以在Python JSON module上阅读。
答案 1 :(得分:0)
Python是Strongly Typed,意思是:
s = "foo"
s += 123
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
如果你要添加字符串( btw是不可变的),你需要&#34; cast&#34; int
到str
:
s = "foo"
s += str(123)
答案 2 :(得分:0)
检查你的字符串。您必须确保string
连接。
尝试:
'{"name":"'+str(name)+'","group":'+str(group)+'},\n'
或者使用json module
来支持您轻松输出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}]}
答案 3 :(得分:-1)
如果你真的想手工编写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)