Building ordered JSON String from LinkedHashMap Building ordered JSON String from LinkedHashMap json json

Building ordered JSON String from LinkedHashMap


Gson if your friend. This will print the ordered map into an ordered JSON string.

If you want to preserve insertion order, use a LinkedHashMap.

I used the latest version of Gson (2.8.5), you can can download it via the following options at the bottom of this post.

import java.util.*;import com.google.gson.Gson;public class OrderedJson {    public static void main(String[] args) {        // Create a new ordered map.        Map<String,String> myLinkedHashMap = new LinkedHashMap<String, String>();        // Add items, in-order, to the map.        myLinkedHashMap.put("1", "first");        myLinkedHashMap.put("2", "second");        myLinkedHashMap.put("3", "third");        // Instantiate a new Gson instance.        Gson gson = new Gson();        // Convert the ordered map into an ordered string.        String json = gson.toJson(myLinkedHashMap, LinkedHashMap.class);        // Print ordered string.        System.out.println(json); // {"1":"first","2":"second","3":"third"}    }}

If you want the items to always be inserted at the right place, use a TreeMap instead.

import java.util.*;import com.google.gson.Gson;public class OrderedJson {    public static void main(String[] args) {        // Create a new ordered map.        Map<String,String> myTreeHashMap = new TreeMap<String, String>();        // Add items, in any order, to the map.        myTreeHashMap.put("3", "third");        myTreeHashMap.put("1", "first");        myTreeHashMap.put("2", "second");        // Instantiate a new Gson instance.        Gson gson = new Gson();        // Convert the ordered map into an ordered string.        String json = gson.toJson(myTreeHashMap, TreeMap.class);        // Print ordered string.        System.out.println(json); // {"1":"first","2":"second","3":"third"}    }}

Dependency Options

Maven

<dependency>    <groupId>com.google.code.gson</groupId>    <artifactId>gson</artifactId>    <version>2.8.5</version></dependency>

Gradle

compile 'com.google.code.gson:gson:2.8.5'

Or you can visit Maven Central for more download options.


JSONObject implies use of org.json library. Don't do that; it is old prototype and there are better options like Jackson and GSON.With Jackson you would just use:

String json = new ObjectMapper().writeValueAsString(myLinkedHashMap);

and get JSON string with entries in whatever traversal order your Map uses.


JSON not taking insertion order due to linkedhashmap params both are string. Is it fine to change first param as Integer like below mentioned code:

Map<Integer,String > myLinkedHashMap =  new LinkedHashMap<>();            myLinkedHashMap.put(1,"first");            myLinkedHashMap.put(2,"second");            myLinkedHashMap.put(3,"third");            System.out.println(myLinkedHashMap);            JSONObject json = new JSONObject(myLinkedHashMap);            System.out.println(json.toString());