【发布时间】:2017-12-18 20:32:10
【问题描述】:
我有一个 JSON 格式的数据集,如下所示:
>>> finalJSON
'"company": {"name": "Micro inc.", "founders": {"name": "Jim D", "name": "Susan A"},
"company": {"name": "Vitacore", "founders": {"name": "Billy B", "name": "Sally Q", "name": "Mark G"}'
.....
我需要遍历并发送以下各项:
'"company": {"name": "Micro inc.", "founders": {"name": "Jim D", "name": "Susan A"},
到这样的 POST 请求:
d = []
for company in FinalJSON:
p = requests.post((url + '/ratio'), json=company, headers=headers)
if(p.status_code == 200):
print p.text
d.append(p.text)
else:
print(p.status_code)
print "Error"
编辑/更新
希望这是我正在尝试做的更完整的示例。我有一个 Pandas DataFrame,其中包含这样的公司名称和员工:
>>> print name_frame
...
name name name name name
Micro inc. NaN Jim D Susan A NaN NaN
Vitacore Billy B NaN Sally Q Mark G NaN
我需要做的就是将它转换成这样的 JSON 格式:
finalJSON = {
"company":{
"name": "Micro inc.",
"founders": {
"name": "Jim D",
"name": "Susan A",
}
}
"company":{
"name": "Vitacore",
"founders": {
"name": "Billy B",
"name": "Sall Q",
"name":"Mark G",
}
在previous question 中,有人建议我尝试一下以获得所需的 JSON 格式:
finalJSON = []
for company, names in df.iterrows():
names = ['"{0}"'.format(name) for name in names.dropna().tolist()]
names_json_str = ('"name": ' if names else '') + ', "name": '.join(names)
finalJSON.append('"company": {"name": "' + company + '", "founders": {' + names_json_str + '}')
finalJSON = ', '.join(finalJSON)
>>> finalJSON
'"company": {"name": "Micro inc.", "founders": {"name": "Jim D", "name": "Susan A"},
"company": {"name": "Vitacore", "founders": {"name": "Billy B", "name": "Sally Q", "name": "Mark G"}'
所以现在我正在将转换与发布请求集成:
for company, names in name_frame.iterrows():
names = ['"{0}"'.format(name) for name in names.dropna().tolist()]
names_json_str = ('"name": ' if names else '') + ', "name": '.join(names)
payload = '"company": {"name": "' + company + '", "founders": {' + names_json_str + '}'
p = requests.post((url), json=payload, headers=headers)
if(p.status_code == 200):
print p.text
d.append(p.text)
else:
print(p.status_code)
print "Error"
虽然payload实际上不被认为是JSON可序列化的
TypeError: set([' + names_json_str + ']) is not JSON serializable
【问题讨论】:
-
finalJSON实际上不是有效的 JSON 值。此外,作为一个字符串,company一次只分配给该字符串中的一个字符。 -
@chepner 这是因为重复的键吗?这是有效的 JSON 格式,虽然很奇怪。您对如何选择我指定的项目有任何想法吗?
-
你需要改变构造
finalJSON的方式。您可能需要一个字符串列表,每个字符串包含 1 家公司的 JSON 数据。请注意,目前每个公司条目都缺少右大括号。 -
@PM2Ring 的格式是否正确:{"company": {"name": "A company", "founders": {"name": "Joe"}}}
-
是的,看起来不错。但是看看你问题中的其他内容,在像
{"name": "Jim D", "name": "Susan A"}这样的 JSON 对象中重复键并不是一个好主意。 JSON 允许这样做,但是当 JSON 对象转换为 Python dict 时,正确处理它会很痛苦。
标签: python json pandas python-requests