pythonjsonpython-3.xbase64

Base 64 encode a JSON variable in Python


I have a variable that stores json value. I want to base64 encode it in Python. But the error 'does not support the buffer interface' is thrown. I know that the base64 needs a byte to convert. But as I am newbee in Python, no idea as how to convert json to base64 encoded string.Is there a straight forward way to do it??


Solution

  • In Python 3.x you need to convert your str object to a bytes object for base64 to be able to encode them. You can do that using the str.encode method:

    >>> import json
    >>> import base64
    >>> d = {"alg": "ES256"} 
    >>> s = json.dumps(d)  # Turns your json dict into a str
    >>> print(s)
    {"alg": "ES256"}
    >>> type(s)
    <class 'str'>
    >>> base64.b64encode(s)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3.2/base64.py", line 56, in b64encode
        raise TypeError("expected bytes, not %s" % s.__class__.__name__)
    TypeError: expected bytes, not str
    >>> base64.b64encode(s.encode('utf-8'))
    b'eyJhbGciOiAiRVMyNTYifQ=='
    

    If you pass the output of your_str_object.encode('utf-8') to the base64 module, you should be able to encode it fine.