Create json objects in java

How to Generate JSON with JsonGenerator in Java?

The JavaScript Object Notation (JSON) is a standard text-based format for representing structured data based on JavaScript object syntax. It is lightweight, flexible, and faster than XML, which is the reason that it is used widely for data interchange between server and client. If you ever work on Java Enterprise Applications then you will come across tasks where you might need to generate and parse JSON data for your application. For instance, RESTful web services use JSON extensively as the format for the data inside requests and responses.

The following examples show a JSON object with name-value pairs:

Java provides an API to parse, transform, and query JSON data using either the object model or the streaming model.

The object model works by creating a tree that represents the JSON data in memory. The object model generates JSON output by navigating the entire tree at once and hence, allows for processing that requires access to the entire contents of the tree at once. The tree can be navigated, analyzed, or modified. This approach is considered flexible but it is slower than the streaming model and requires more memory.

Java API provides the javax.json package, it contains a reader interface, a writer interface, and a model builder interface for the object model. The package also contains other utility classes and Java types for JSON elements.

In the object model, a JSON-object reference is created which represents the root of the tree and can be used to navigate the tree or to write it to a stream as JSON data. This JSON-object reference created can either be of type JsonObject or JsonArray, and both of them are the subtypes of JsonStructure. Which one it will depend on the format/content of the file.

Читайте также:  Native method java lang unsatisfiedlinkerror

Let’s describe each of them to be precise and clear.

Let us go through some traits of JsonObject

  • Written in key-value pairs.
  • Keys must be strings and values must be valid JSON type.
  • JsonObject starts and ends with curly braces < >.
  • Order is not important.

Sample code for JSON object is as follows in below illustration

Let us go through some traits of JsonArray

  • Used to organize a collection of related items.
  • Values can be of type string, number, object, array, boolean, or null.
  • JsonArray starts and ends with square brackets [ ].
  • Order is important.

Illustration:

JsonObject and JsonArray can also be used in a nested manner to represent some special kind of data. You can either use the object inside the array or the array inside the object.

Now that we are clear with the basics, we can learn how to code.

Now let us come onto installing javax.json API. So, If you are using a Maven project then add this dependency to your pom.xml file:

 javax.json javax.json-api 1.1.4 

Otherwise, in case you are creating a normal project then add the javax.json jar to your Libraries else download the jar file from here and follow the below steps

Step 1: Creating Object model from given JSON data

if we assume that we already have some data in the JSON format, and thus want to convert that into a java JsonObject, then we can make use of the javax.json.JsonStructure.

Let us assume we have a sample.txt that stores JSON data as follows:

Apart from just creating an object of the data, we need to have a way to read that data as well!

Step 2: Navigate it.

For navigating the data we will create a function navigateTree() that will take the JSON object/model that we created, as an input, and for every object or array that it encounters nested inside the JSON model, it will call the navigating function again, and if the element is a value, then it will print the standard output.

Now we can proceed to code for creating a JsonStructure out of this sample.txt file which is as shown below

Java

OBJECT Key firstName: STRING John Key lastName: STRING Smith Key age: NUMBER 25 Key address: OBJECT Key streetAddress: STRING 21 2nd Street Key city: STRING New York Key state: STRING NY Key postalCode: STRING 10021 Key phoneNumber: ARRAY OBJECT Key type: STRING home Key number: STRING 212 555-1234 OBJECT Key type: STRING fax Key number: STRING 646 555-4567

2. Creating an object model from code

In order to create an object model of our own from scratch we will make use of the JSON class that provides a method createObjectBuilder() that creates a JSON object builder. The JsonObjectBuilder interface acts as a builder for creating JsonObject models from scratch. This interface initializes an empty JSON object model and provides methods to add name/value pairs to the object model and to return the resulting object. The methods in this class can be chained to add multiple name/value pairs to the object.

Java

OBJECT Key firstName: STRING Duke Key lastName: STRING Java Key age: NUMBER 18 Key streetAddress: STRING 100 Internet Dr Key city: STRING JavaTown Key state: STRING JA Key postalCode: STRING 12345 Key phoneNumbers: ARRAY OBJECT Key type: STRING mobile Key number: STRING 111-111-1111 OBJECT Key type: STRING home Key number: STRING 222-222-2222

3. Writing Object model to a Stream

The object models that we created in the above examples can be written to a stream using the JsonWriter class. JsonWriter writes a JSON object or array structure to an output source. This time we will write the contents of the sample.txt to an output stream after we have converted it to a JsonStructure.

Java

Output: On the console, the following will be printed in a single line

Now dwelling onto next model,

The streaming model uses an event-based parser that reads JSON data one element at a time. The streaming model generates JSON output to a given stream by making a function call with one element at a time. This approach is adequate for local processing, in which the processing of an element does not require information from the rest of the data. The way it works is that the parser generates events and stops for processing whenever it either finds a key, or finds a value, or reaches the beginning or end of an object or array. The element found can be processed or discarded based on the code and then the parser moves to the next event.

The Java API provides the javax.json.stream package, it contains a parser interface, JsonParser, and a generator interface, JsonGenerator for the streaming model. The interface JsonParser contains methods to parse JSON in a streaming way. The interface JsonGenerator contains methods to write JSON to an output source in a streaming way.

In the upcoming code, we will make use of the same sample.txt file to parse it.

1. Reading JSON data using a Parser: We will use the JsonParser that provides forward, read-only access to JSON data in a streaming way. JsonParser parses JSON using the pull parsing programming model. In this model, the client code controls the thread and calls the method next() to advance the parser to the next state after processing each element. The parser can generate the following events:

START_OBJECT, END_OBJECT, START_ARRAY, END_ARRAY, KEY_NAME, VALUE_STRING, VALUE_NUMBER, VALUE_TRUE, VALUE_FALSE, and VALUE_NULL.

In the following code we will perform the following steps:

  1. Get the JSON data in the form of a String, so that it can be passed to the parser object.
  2. Obtain a parser instance by calling the JSON.createParser static method and pass the string to it.
  3. Iterate over the parser events with the JsonParser.hasNext and the JsonParser.next methods.
  4. Perform local processing for each element.

Implementation:

Источник

How to create a JSON Object using Jackson

In an earlier article, I wrote about how to create a JSON array using Jackson API. In this short article, you’ll learn to create a JSON object using the ObjectMapper class from Jackson.

implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0' 
dependency> groupId>com.fasterxml.jackson.coregroupId> artifactId>jackson-databindartifactId> version>2.10.0version> dependency> 
try  // create `ObjectMapper` instance ObjectMapper mapper = new ObjectMapper(); // create a JSON object ObjectNode user = mapper.createObjectNode(); user.put("id", 1); user.put("name", "John Doe"); user.put("email", "john.doe@example.com"); user.put("salary", 3545.99); user.put("role", "QA Engineer"); user.put("admin", false); // convert `ObjectNode` to pretty-print JSON // without pretty-print, use `user.toString()` method String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user); // print json System.out.println(json); > catch (Exception ex)  ex.printStackTrace(); > 
 "id" : 1, "name" : "John Doe", "email" : "john.doe@example.com", "salary" : 3545.99, "role" : "QA Engineer", "admin" : false > 

Just like a simple JSON object, you can also use the ObjectMapper class to create a JSON object inside another JSON object using Jackson API, as shown below:

try  // create `ObjectMapper` instance ObjectMapper mapper = new ObjectMapper(); // create a JSON object ObjectNode user = mapper.createObjectNode(); user.put("id", 1); user.put("name", "John Doe"); user.put("email", "john.doe@example.com"); user.put("salary", 3545.99); user.put("role", "QA Engineer"); user.put("admin", false); // create a child JSON object ObjectNode address = mapper.createObjectNode(); address.put("street", "2389 Radford Street"); address.put("city", "Horton"); address.put("state", "KS"); address.put("zipCode", 66439); // append address to user user.set("address", address); // convert `ObjectNode` to pretty-print JSON String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user); // print json System.out.println(json); > catch (Exception ex)  ex.printStackTrace(); > 
 "id" : 1, "name" : "John Doe", "email" : "john.doe@example.com", "salary" : 3545.99, "role" : "QA Engineer", "admin" : false, "address" :  "street" : "2389 Radford Street", "city" : "Horton", "state" : "KS", "zipCode" : 66439 > > 

For more Jackson examples, check out the How to read and write JSON using Jackson in Java tutorial. ✌️ Like this article? Follow me on Twitter and LinkedIn. You can also subscribe to RSS Feed.

You might also like.

Источник

Оцените статью