Comment encoder et décoder un tableau d'octets JSON

La manière typique d'envoyer du binaire en JSON est de l'encoder en base64. Java propose différentes méthodes pour encoder et décoder un octet []. L'un d'eux est DatatypeConverter.

Supposons que nous ayons un tableau JSON comme indiqué ci-dessous:

{
'menu': {
'id': 'file',
'value': 'File',
'popup': {

'menuitem': [


{'value': 'New', 'onclick': 'CreateNewDoc()'},


{'value': 'Open', 'onclick': 'OpenDoc()'},


{'value': 'Close', 'onclick': 'CloseDoc()'}

]
}
} }


Encoder JSON en Base64

Pour encoder le JSON ci-dessus, nous utiliserions


String base64Encoded = DatatypeConverter.printBase64Binary(jsonBytes);

En rapport:



Décoder le JSON Base64

Pour décoder un JSON encodé en base64, nous utiliserions


byte[] base64Decoded = DatatypeConverter.parseBase64Binary(base64Encoded);

Exemple de code:

import javax.xml.bind.DatatypeConverter; public class JsonEncodeDecode {
public static void main(String[] args) {
String json = '{'menu': { ' +


' 'id': 'file', ' +


' 'value': 'File', ' +


' 'popup': { ' +


' 'menuitem': [ ' +


'
{'value': 'New', 'onclick': 'CreateNewDoc()'}, ' +


'
{'value': 'Open', 'onclick': 'OpenDoc()'}, ' +


'
{'value': 'Close', 'onclick': 'CloseDoc()'} ' +


' ] ' +


' } ' +


'}}';

byte[] bytes = json.getBytes();

String base64Encoded = DatatypeConverter.printBase64Binary(bytes);
System.out.println('Encoded Json: ');
System.out.println(base64Encoded + ' ');

byte[] base64Decoded = DatatypeConverter.parseBase64Binary(base64Encoded);
System.out.println('Decoded Json: ');
System.out.println(new String(base64Decoded));
} }

Sortie du JSON encodé:

eyJtZW51IjogewogICJpZCI6ICJmaWxlIiwKICAidmFsdW Noter:Le JSON encodé est tronqué par souci de propreté, sinon c'est une très longue chaîne.

Sortie du JSON décodé:

{
'menu': {
'id': 'file',
'value': 'File',
'popup': {

'menuitem': [


{'value': 'New', 'onclick': 'CreateNewDoc()'},


{'value': 'Open', 'onclick': 'OpenDoc()'},


{'value': 'Close', 'onclick': 'CloseDoc()'}

]
}
} }