Python decoding | Bytes to json

Viewed 678

I'm trying to convert bytes to json. This is my bytes object:

payload = b'{"content":[{"text":{"type":"text","format":"plain","text":"Luc Nilis heeft een nieuwe club gevonden en volgt Belgische coach naar Turkije\n\nHurlu Dedju over Beerschot bekijkt mogelijkheden om aandeel Saoedische prins te vergroten Bandencentrale Luyckx over Zware tegenvaller(s) bij AA Gent: recordaankoop mogelijk lang out, eerste seizoenshelft zit er waarschijnlijk op voor andere versterking Pxc3xa4rs over De kwelduivel van het Anderlechtse middenveld: \"Ik moest Vlap uit de match houden. Het liep wel goed\" Warlord over Meerderheid van Beerschot-aandelen straks in buitenlandse handen? \"We zijn de aandelenstructuur aan het herbekijken\" BlueWhiteSky over AA Gent, vijf maanden geen wedstrijd en dan zo slap spelen: \"We misten goesting, agressiviteit en concentratie\" Hurlu Dedju over Nieuw Genks koningskoppel in de maak? Cyriel Dessers en Paul Onuachu hebben deze reactie in huis na Genkse zege Hurlu Dedju over Vercauteren geeft Vrancken gelijk: \"Wij hebben ook twee punten weggegeven, maar met al de rest ga ik akkoord\" SnellenEddy over POLL: (Mogelijk) geen Belgisch voetbal op Telenet: wat met uw abo? Ogun Jimmy over Politiek - constructief en respectvol discussie-forum Blauw zwart Jan Breydel over Ver het enige lichtpunt bij Anderlecht, de terugkeer van Dimata: \"Maar dit mag niet gebeuren!\" Kantine"}}]}'

I can load it to json if I change the b to r so that:

import json
    
payload = r'{"content":[{"text":{"type":"text","format":"plain","text":"Luc Nilis heeft een nieuwe club gevonden en volgt Belgische coach naar Turkije\n\nHurlu Dedju over Beerschot bekijkt mogelijkheden om aandeel Saoedische prins te vergroten Bandencentrale Luyckx over Zware tegenvaller(s) bij AA Gent: recordaankoop mogelijk lang out, eerste seizoenshelft zit er waarschijnlijk op voor andere versterking Pxc3xa4rs over De kwelduivel van het Anderlechtse middenveld: \"Ik moest Vlap uit de match houden. Het liep wel goed\" Warlord over Meerderheid van Beerschot-aandelen straks in buitenlandse handen? \"We zijn de aandelenstructuur aan het herbekijken\" BlueWhiteSky over AA Gent, vijf maanden geen wedstrijd en dan zo slap spelen: \"We misten goesting, agressiviteit en concentratie\" Hurlu Dedju over Nieuw Genks koningskoppel in de maak? Cyriel Dessers en Paul Onuachu hebben deze reactie in huis na Genkse zege Hurlu Dedju over Vercauteren geeft Vrancken gelijk: \"Wij hebben ook twee punten weggegeven, maar met al de rest ga ik akkoord\" SnellenEddy over POLL: (Mogelijk) geen Belgisch voetbal op Telenet: wat met uw abo? Ogun Jimmy over Politiek - constructief en respectvol discussie-forum Blauw zwart Jan Breydel over Ver het enige lichtpunt bij Anderlecht, de terugkeer van Dimata: \"Maar dit mag niet gebeuren!\" Kantine"}}]}'

json.loads(payload)

However, when I try to decode it to string it fails.

My options, all of them failed:

import codecs
import json

payload = b'{"content":[{"text":{"type":"text","format":"plain","text":"Luc Nilis heeft een nieuwe club gevonden en volgt Belgische coach naar Turkije\n\nHurlu Dedju over Beerschot bekijkt mogelijkheden om aandeel Saoedische prins te vergroten Bandencentrale Luyckx over Zware tegenvaller(s) bij AA Gent: recordaankoop mogelijk lang out, eerste seizoenshelft zit er waarschijnlijk op voor andere versterking Pxc3xa4rs over De kwelduivel van het Anderlechtse middenveld: \"Ik moest Vlap uit de match houden. Het liep wel goed\" Warlord over Meerderheid van Beerschot-aandelen straks in buitenlandse handen? \"We zijn de aandelenstructuur aan het herbekijken\" BlueWhiteSky over AA Gent, vijf maanden geen wedstrijd en dan zo slap spelen: \"We misten goesting, agressiviteit en concentratie\" Hurlu Dedju over Nieuw Genks koningskoppel in de maak? Cyriel Dessers en Paul Onuachu hebben deze reactie in huis na Genkse zege Hurlu Dedju over Vercauteren geeft Vrancken gelijk: \"Wij hebben ook twee punten weggegeven, maar met al de rest ga ik akkoord\" SnellenEddy over POLL: (Mogelijk) geen Belgisch voetbal op Telenet: wat met uw abo? Ogun Jimmy over Politiek - constructief en respectvol discussie-forum Blauw zwart Jan Breydel over Ver het enige lichtpunt bij Anderlecht, de terugkeer van Dimata: \"Maar dit mag niet gebeuren!\" Kantine"}}]}'

payload_decode = codecs.decode(payload, 'unicode_escape')
data = json.loads(payload_decode,strict=False)

import json

payload = b'{"content":[{"text":{"type":"text","format":"plain","text":"Luc Nilis heeft een nieuwe club gevonden en volgt Belgische coach naar Turkije\n\nHurlu Dedju over Beerschot bekijkt mogelijkheden om aandeel Saoedische prins te vergroten Bandencentrale Luyckx over Zware tegenvaller(s) bij AA Gent: recordaankoop mogelijk lang out, eerste seizoenshelft zit er waarschijnlijk op voor andere versterking Pxc3xa4rs over De kwelduivel van het Anderlechtse middenveld: \"Ik moest Vlap uit de match houden. Het liep wel goed\" Warlord over Meerderheid van Beerschot-aandelen straks in buitenlandse handen? \"We zijn de aandelenstructuur aan het herbekijken\" BlueWhiteSky over AA Gent, vijf maanden geen wedstrijd en dan zo slap spelen: \"We misten goesting, agressiviteit en concentratie\" Hurlu Dedju over Nieuw Genks koningskoppel in de maak? Cyriel Dessers en Paul Onuachu hebben deze reactie in huis na Genkse zege Hurlu Dedju over Vercauteren geeft Vrancken gelijk: \"Wij hebben ook twee punten weggegeven, maar met al de rest ga ik akkoord\" SnellenEddy over POLL: (Mogelijk) geen Belgisch voetbal op Telenet: wat met uw abo? Ogun Jimmy over Politiek - constructief en respectvol discussie-forum Blauw zwart Jan Breydel over Ver het enige lichtpunt bij Anderlecht, de terugkeer van Dimata: \"Maar dit mag niet gebeuren!\" Kantine"}}]}'
        
payload_decode = payload.decode('utf8')
data = json.loads(payload_decode,strict=False)

import json

payload = b'{"content":[{"text":{"type":"text","format":"plain","text":"Luc Nilis heeft een nieuwe club gevonden en volgt Belgische coach naar Turkije\n\nHurlu Dedju over Beerschot bekijkt mogelijkheden om aandeel Saoedische prins te vergroten Bandencentrale Luyckx over Zware tegenvaller(s) bij AA Gent: recordaankoop mogelijk lang out, eerste seizoenshelft zit er waarschijnlijk op voor andere versterking Pxc3xa4rs over De kwelduivel van het Anderlechtse middenveld: \"Ik moest Vlap uit de match houden. Het liep wel goed\" Warlord over Meerderheid van Beerschot-aandelen straks in buitenlandse handen? \"We zijn de aandelenstructuur aan het herbekijken\" BlueWhiteSky over AA Gent, vijf maanden geen wedstrijd en dan zo slap spelen: \"We misten goesting, agressiviteit en concentratie\" Hurlu Dedju over Nieuw Genks koningskoppel in de maak? Cyriel Dessers en Paul Onuachu hebben deze reactie in huis na Genkse zege Hurlu Dedju over Vercauteren geeft Vrancken gelijk: \"Wij hebben ook twee punten weggegeven, maar met al de rest ga ik akkoord\" SnellenEddy over POLL: (Mogelijk) geen Belgisch voetbal op Telenet: wat met uw abo? Ogun Jimmy over Politiek - constructief en respectvol discussie-forum Blauw zwart Jan Breydel over Ver het enige lichtpunt bij Anderlecht, de terugkeer van Dimata: \"Maar dit mag niet gebeuren!\" Kantine"}}]}'

payload_decode = str(payload)
data = json.loads(payload_decode,strict=False)

Thank you for your help!

1 Answers

The main problem is that without the r as a string prefix, the backslashes (\) disappear from the string. So the problem is not an encoding question but only the problem of providing a valid json string, be it in bytes or unicode characters. Just print the string after the payload = ... statement to see that the string is broken and cannot be parsed because it contains:

  • raw new line characters inside strings
  • raw quote characters (") inside strings

Once this is fixed:

payload = rb'{"content":[{"text":{"type":"text","format":"plain","text":"Luc Nilis heeft een nieuwe club gevonden en volgt Belgische coach naar Turkije\n\nHurlu Dedju over Beerschot bekijkt mogelijkheden om aandeel Saoedische prins te vergroten Bandencentrale Luyckx over Zware tegenvaller(s) bij AA Gent: recordaankoop mogelijk lang out, eerste seizoenshelft zit er waarschijnlijk op voor andere versterking Pxc3xa4rs over De kwelduivel van het Anderlechtse middenveld: \"Ik moest Vlap uit de match houden. Het liep wel goed\" Warlord over Meerderheid van Beerschot-aandelen straks in buitenlandse handen? \"We zijn de aandelenstructuur aan het herbekijken\" BlueWhiteSky over AA Gent, vijf maanden geen wedstrijd en dan zo slap spelen: \"We misten goesting, agressiviteit en concentratie\" Hurlu Dedju over Nieuw Genks koningskoppel in de maak? Cyriel Dessers en Paul Onuachu hebben deze reactie in huis na Genkse zege Hurlu Dedju over Vercauteren geeft Vrancken gelijk: \"Wij hebben ook twee punten weggegeven, maar met al de rest ga ik akkoord\" SnellenEddy over POLL: (Mogelijk) geen Belgisch voetbal op Telenet: wat met uw abo? Ogun Jimmy over Politiek - constructief en respectvol discussie-forum Blauw zwart Jan Breydel over Ver het enige lichtpunt bij Anderlecht, de terugkeer van Dimata: \"Maar dit mag niet gebeuren!\" Kantine"}}]}'

You can load either from the byte string:

json.loads(payload)

or from an unicode string:

json.loads(payload.decode())
Related