Konvertera med JSON-B

JSON-B logotyp

JSON-B (JSON Binding) är namnet på Java specifikationen JSR-367. Specifikationen definierar konvertering mellan Java objekt och JSON-meddelanden och vice versa. Något som vi Java-utvecklare historiskt behövt förlita oss på tredjepartsalternativ (t.ex. Gson eller Jackson) för att lösa i de fall vi inte bara hackat ihop någon egen konverterare. Givetvis är Oracle med på tåget med “convention over configuration” vilket innebär nära nollkonfiguration för att komma igång. Uppstår behovet så går det ypperligt att konfigurera JSON-B efter tyckte och smak båda via generell konfiguration och annoteringar per Java-klass. Vidare har Oracle valt att fortsätta med deras välbekanta Factory-pattern för att dölja implementationen. Med andra ord kommer den som är bekant med t.ex. JAXB (Java Architecture for XML Binding) snabbt känna igen strukturen.

JSON-B version 1.0 samt referensimplementationen Yasson ingår i nyligen släppta Java EE 8. Ett mycket välkommet tillägg då en del företag har en restriktiv syn på tredjepartsbibliotek och JSON-P har varit allt annat än smidigt att använda; om man inte har en obskyr förkärlek för att skriva mer eller mindre redundant meta-kod vill säga.

Exemplet nedan visar handgripligen hur smidig denna typ av datakonvertering blir med användande av JSON-B.

Java klass

public class Person {
	public String name;
	public boolean driversLicense;
	
	Public Person(String name, boolean driversLicense) {
		this.name = name;
		this.driversLicense = driversLicense;
	}
}

Java program

public class MyProgram {
	public static void main(String[] args) {
		Person person = new Person("Mikael", true);
		
		Jsonb jsonb = JsonBuilder.create();
		**String jsonPerson = jsonb.toJson(person);**
		
		System.out.println(jsonPerson);
	}
}

Exekvering

Exekvering av ovan enkla program ger följande resultat:

{
	"name": "Mikael",
	"driversLicense": true
}

Förr (JSON-P)

För den som inte minns hur samma kodsnutt ser ut med JSON-P (introducerades i Java EE 7) så kommer den här.

	...
	JsonGenerator gen = Json.createGenerator(System.out);
	gen.writeStartArray()
			.writeStartObject()
				.write("name", person.name)
				.write("driversLicense", person.driversLicense)
			.writeEnd()
		.writeEnd()
		.flush();
	...

Som synes blir livet för oss utvecklare enklare framöver utan att behöva förlita oss på tredjepartsbibliotek.

För den vetgirige finns mer information att tillgå på JSON-B’s hemsida.