在python中将字符串转换为json文件中的一行

时间:2014-05-21 01:13:22

标签: 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,"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对象无法连接。我理解为什么我会收到这个错误。我只是想知道是否有更好的方法来做到这一点。

4 个答案:

答案 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; intstr

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)