Andrew H
Andrew H

Reputation: 33

Issues with JSON Data in Python

I am working on a project to incorporate Verizon Thingspace REST APIs into a Python program.

A co-worker provided me with an example in CURL that works (I am not familiar with Curl so am trying to convert into Python).

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" --header "VZ-M2M-Token: 621d9779-f8bc-4fe9-91dd-b726c52e7117" --header "Authorization: Bearer 89ba225e1438e95bd05c3cc288d3591" -d "{\"accountName\": \"TestAccount-1\"}" https://thingspace.verizon.com/api/m2m/v1/devices/actions/list

I'm trying to convert this exact same request into a Python function. Here's what I have:

import requests

def getList(token):
    url = "https://thingspace.verizon.com/api/m2m/v1/devices/actions/list"
    headers = {
                "Content-Type": "application/json", 
                "Accept": "application/json",
                "Authorization": "Bearer 89ba225e1438e95bd05c3cc288d3591",
                "VZ-M2M-Token": "f7ef3a35-abb6-418b-92d4-7cdac8b06c5f", 
            }
    data = {"accountName": "TestAccount-1"}

    print data

    deviceList = requests.post(url, data=data, headers=headers)

    print headers
    print (deviceList.status_code, deviceList.reason, deviceList.text)
    return deviceList

When I run this, I get the following error message back in JSON:

(400, 'Bad Request', u'{"errorCode":"REQUEST_FAILED.UnexpectedError","errorMessage":"Could not read document: Unrecognized token \'accountName\': was expecting (\'true\', \'false\' or \'null\')\n at [Source: java.io.PushbackInputStream@51ceaf1d; line: 1, column: 13]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'accountName\': was expecting (\'true\', \'false\' or \'null\')\n at [Source: java.io.PushbackInputStream@51ceaf1d; line: 1, column: 13]"}')

You can reference the API information here: https://thingspace.verizon.com/developer/apis#/Connectivity%20Management/API%20Reference/Retrieve%20Device%20Information.html

I believe there might be something wrong with my JSON string but I need another set of eyes.

Upvotes: 1

Views: 2004

Answers (1)

Daniel
Daniel

Reputation: 42758

data is not automatically converted to json, you have to do this explicitly:

deviceList = requests.post(url, data=json.dumps(data), headers=headers)

Upvotes: 2

Related Questions