1

Trying to output my response from Microsoft's Computer Vision API to a .json file, it works with all of the other APIs I've been using so far. With the code below, directly from Microsoft's documentation, I get an error:

Error: the JSON object must be str, not 'bytes'

Removing the parsed = json.loads(data) and using print(json.dumps(data, sort_keys=True, indent=2)) prints out the information for the image that I want, but also says Error and is prefixed with

b

denoting it's in bytes and ending with

is not JSON serializable

I'm just trying to find out how I can get the response into a .json file like i'm able to do with other APIs and am at a loss for how I can possible convert this in a way that will work.

import http.client, urllib.request, urllib.parse, urllib.error, base64, json

API_KEY = '{API_KEY}'

uri_base = 'westus.api.cognitive.microsoft.com'

headers = {
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': API_KEY,
}

params = urllib.parse.urlencode(
    {
        'visualFeatures': 'Categories, Description, Color',
        'language': 'en',
    }
)

body = "{'url': 'http://i.imgur.com/WgPtc53.jpg'}"

try:
    conn = http.client.HTTPSConnection(uri_base)
    conn.request('POST', '/vision/v1.0/analyze?%s' % params, body, headers)
    response = conn.getresponse()
    data = response.read()

    # 'data' contains the JSON data. The following formats the JSON data for display.
    parsed = json.loads(data)
    print ("Response:")
    print (json.dumps(parsed, sort_keys=True, indent=2))
    conn.close()

except Exception as e:
    print('Error:')
    print(e)

Shortly after posting the question, I realized I had missed looking for something: just converting bytes to a string.

found this Convert bytes to a Python string

and was able to modify my code to:

    parsed = json.loads(data.decode('utf-8'))

And it seems to have resolved my issue. Now error-free and able to export to .json file like I needed.

smg123
  • 11
  • 2

0 Answers0