1

I have some JSON data in python that looks like this:

>>> print name_frame
... 
               name    name1    name2    name3     name4
Micro inc.      NaN    Jim D  Susan A      NaN       NaN
Vitacore    Billy B      NaN  Sally Q   Mark G       NaN
>>> payload = name_frame.apply(lambda x: [x.dropna()], axis=1).to_json(force_ascii=False)
... 
>>> print payload
... 




   {
"Micro inc.":[{"name1":"Jim D","name2":"Susan A"}],
    "Vitacore":[{"name":"Billy B","name2":"Sally Q","name3":"Mark G"}],

}

And I need it to look like this:

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",
        }

Does anyone know of any tools, libraries, or general advice on how I can get this done? I need to send each company object as a POST request to an API and it requires this format. From there I need to append the results to a pandas DataFrame. Which I believe should involve looping through the JSON data, submitting each company the API, taking the result and adding it to a dict or if possible directly to a Pandas DataFrame

payload= '''a single company from finalJSON'''

#p is a POST Request
p = requests.post((url + '/r'), json=payload, headers=headers)
p.text #<---- gotta go to a Pandas DataFrame 

Thank you in advance for any help or advice

cgclip
  • 292
  • 1
  • 3
  • 14

1 Answers1

1
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"}'
Alexander
  • 105,104
  • 32
  • 201
  • 196