Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧行转换为JSON模式,然后发出POST请求 我有一个JSON格式的数据集,如下所示: 我需要循环并发送以下各项: 对于这样的POST请求: 编辑/更新_Python_Json_Pandas_Python Requests - Fatal编程技术网

Python 将数据帧行转换为JSON模式,然后发出POST请求 我有一个JSON格式的数据集,如下所示: 我需要循环并发送以下各项: 对于这样的POST请求: 编辑/更新

Python 将数据帧行转换为JSON模式,然后发出POST请求 我有一个JSON格式的数据集,如下所示: 我需要循环并发送以下各项: 对于这样的POST请求: 编辑/更新,python,json,pandas,python-requests,Python,Json,Pandas,Python Requests,希望这是一个更完整的例子,我正试图这样做。我有一个包含公司名称和员工的数据框架,如下所示: >>> 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

希望这是一个更完整的例子,我正试图这样做。我有一个包含公司名称和员工的数据框架,如下所示:

>>> 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
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",
        }
我需要做的是将其转换为JSON格式,如下所示:

>>> 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
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",
        }
在一次询问中,我被建议尝试此方法以获得所需的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"}'
现在我正在将转换与post请求集成:

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"
尽管事实上负载不被认为是JSON可序列化的

TypeError: set([' + names_json_str + ']) is not JSON serializable

如何格式化json字符串完全取决于服务器的要求

如果服务器接受公司json字符串为:

{"company": {"name": "Micro inc.", "founders": ["Jim D", "Susan A"]}}
您可以执行以下操作:

finalJSON = []
rows = [('Micro inc.', ('Jim D', 'Susan A')),
        ('Vitacore', ('Billy B', 'Sally Q', 'Mark G'))]

for company_name, founders in rows: 
    # replace rows with real data, e.g. df.iterrows() 
    founders = ', '.join('"{}"'.format(founder) for founder in founders)
    json_str = '{{"company": {{"name": "{}", "founders": [{}]}}}}'.format(company_name, founders)
    finalJSON.append(json_str)

for company in finalJSON:
    print(company)
    # do stuff with company
所以基本上是这样的:

 payload = '"company": {"name": "' + company + '", "founders": {' + names_json_str + '}'

API的格式错误,修复后解决了问题

finalJSON
实际上不是有效的JSON值。此外,作为一个字符串,
company
一次只分配给该字符串中的一个字符。@chepner这是因为重复的键吗?这是有效的JSON格式,尽管很奇怪。您对如何选择我指定的项目有什么想法吗?您需要更改构建
finalJSON
的方式。您可能需要一个字符串列表,每个字符串包含1个公司的JSON数据。请注意,当前每个公司条目都缺少右大括号。@PM2Ring的格式正确:{“公司”:{“名称”:“公司”,“创始人”:{“名称”:“乔”}}}}是的,看起来不错。但是看看你问题中的其他内容,在JSON对象中重复使用键不是一个好主意,比如
{“name”:“Jim D”,“name”:“Susan a”}
。JSON允许这样做,但是当JSON对象被转换为Python dict时,正确处理它是一件痛苦的事情。我刚刚更新了我的问题,给出了我尝试做什么的完整上下文。我认为我如何将pandas DataFrame对象转换为请求的条目有点不对劲。我尝试了您推荐的代码,但不幸的是,在post中使用时,API不接受循环中的公司request@cgclip这是意料之中的。作为API的用户,您应该知道格式要求。我只提供一个例子。
 payload = '"company": {"name": "' + company + '", "founders": {' + names_json_str + '}'