Convert a JSON string to object in Java ME?

JavaJsonJava MeSerialization

Java Problem Overview


Is there a way in Java/J2ME to convert a string, such as:

{name:"MyNode", width:200, height:100}

to an internal Object representation of the same, in one line of code?

Because the current method is too tedious:

Object n = create("new");
setString(p, "name", "MyNode");
setInteger(p, "width", 200);
setInteger(p, "height", 100);

Maybe a JSON library?

Java Solutions


Solution 1 - Java

I used a few of them and my favorite is,

http://code.google.com/p/json-simple/

The library is very small so it's perfect for J2ME.

You can parse JSON into Java object in one line like this,

JSONObject json = (JSONObject)new JSONParser().parse("{\"name\":\"MyNode\", \"width\":200, \"height\":100}");
System.out.println("name=" + json.get("name"));
System.out.println("width=" + json.get("width"));

Solution 2 - Java

The simplest option is Jackson:

MyObject ob = new ObjectMapper().readValue(jsonString, MyObject.class);

There are other similarly simple to use libraries (Gson was already mentioned); but some choices are more laborious, like original org.json library, which requires you to create intermediate "JSONObject" even if you have no need for those.

Solution 3 - Java

GSON is a good option to convert java object to json object and vise versa.
It is a tool provided by google.

for converting json to java object use: fromJson(jsonObject,javaclassname.class)
for converting java object to json object use: toJson(javaObject)
and rest will be done automatically

For more information and for download

Solution 4 - Java

You can do this easily with Google GSON.

Let's say you have a class called User with the fields user, width, and height and you want to convert the following json string to the User object.

{"name":"MyNode", "width":200, "height":100}

You can easily do so, without having to cast (keeping nimcap's comment in mind ;) ), with the following code:

Gson gson = new Gson(); 
final User user = gson.fromJson(jsonString, User.class);

Where jsonString is the above JSON String.

For more information, please look into https://code.google.com/p/google-gson/

Solution 5 - Java

You have many JSON parsers for Java:

  • JSONObject.java A JSONObject is an unordered collection of name/value pairs. Its external form is a string wrapped in curly braces with colons between the names and values, and commas between the values and names. The internal form is an object having get() and opt() methods for accessing the values by name, and put() methods for adding or replacing values by name. The values can be any of these types: Boolean, JSONArray, JSONObject, Number, and String, or the JSONObject.NULL object.

  • JSONArray.java A JSONArray is an ordered sequence of values. Its external form is a string wrapped in square brackets with commas between the values. The internal form is an object having get() and opt() methods for accessing the values by index, and put() methods for adding or replacing values. The values can be any of these types: Boolean, JSONArray, JSONObject, Number, and String, or the JSONObject.NULL object.

  • JSONStringer.java A JSONStringer is a tool for rapidly producing JSON text.

  • JSONWriter.java A JSONWriter is a tool for rapidly writing JSON text to streams.

  • JSONTokener.java A JSONTokener takes a source string and extracts characters and tokens from it. It is used by the JSONObject and JSONArray constructors to parse JSON source strings.

  • JSONException.java A JSONException is thrown when a syntax or procedural error is detected.

  • JSONString.java The JSONString is an interface that allows classes to implement their JSON serialization.

Solution 6 - Java

JSON official site is where you should look at. It provides various libraries which can be used with Java, I've personally used this one, JSON-lib which is an implementation of the work in the site, so it has exactly the same class - methods etc in this page.

If you click the html links there you can find anything you want.

In short:

to create a json object and a json array, the code is:

JSONObject obj = new JSONObject();
obj.put("variable1", o1);
obj.put("variable2", o2);
JSONArray array = new JSONArray();
array.put(obj);

o1, o2, can be primitive types (long, int, boolean), Strings or Arrays.

The reverse process is fairly simple, I mean converting a string to json object/array.

String myString;

JSONObject obj = new JSONObject(myString);
    
JSONArray array = new JSONArray(myString);

In order to be correctly parsed you just have to know if you are parsing an array or an object.

Solution 7 - Java

Use google GSON library for this

public static <T> T getObject(final String jsonString, final Class<T> objectClass) {  
    Gson gson = new Gson();  
    return gson.fromJson(jsonString, objectClass);  
}

http://iandjava.blogspot.in/2014/01/java-object-to-json-and-json-to-java.html

Solution 8 - Java

Like many stated already, A pretty simple way to do this using JSON.simple as below

import org.json.JSONObject;

String someJsonString = "{name:"MyNode", width:200, height:100}";
JSONObject jsonObj = new JSONObject(someJsonString);

And then use jsonObj to deal with JSON Object. e.g jsonObj.get("name");

As per the below link, JSON.simple is showing constant efficiency for both small and large JSON files

http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

Solution 9 - Java

JSON IO is by far the easiest way to convert a JSON string or JSON input stream to a Java Object

String to Java Object
Object obj = JsonReader.jsonToJava("[\"Hello, World\"]");

https://code.google.com/p/json-io/

Solution 10 - Java

This is an old question and json-simple (https://code.google.com/p/json-simple/) could be a good solution at that time, but please consider that project seems not to be active for a while !

I suggest the Gson which is now hosted at: https://github.com/google/gson

If performance is your issue you can have a look at some benchmarks http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/ which compare.

Solution 11 - Java

Apart from www.json.org you can also implement your own parser using javacc and matching your personnal grammar/schema. See this note on my blog : http://plindenbaum.blogspot.com/2008/07/parsing-json-with-javacc-my-notebook.html

Solution 12 - Java

I've written a library that uses json.org to parse JSON, but it will actually create a proxy of an interface for you. The code/JAR is on code.google.com.

http://fixjures.googlecode.com/

I don't know if it works on J2ME. Since it uses Java Reflection to create proxies, I'm thinking it won't work. Also, it's currently got a hard dependency on Google Collections which I want to remove and it's probably too heavyweight for your needs, but it allows you to interact with your JSON data in the way you're looking for:

interface Foo {
    String getName();
    int getWidth();
    int getHeight();
}

Foo myFoo = Fixjure.of(Foo.class).from(JSONSource.newJsonString("{ name : \"foo name\" }")).create();
String name = myFoo.getName(); // name now .equals("foo name");

Solution 13 - Java

Just make a Json object in java with the following Json String.In your case

{name:"MyNode", width:200, height:100}

if the above is your Json string , just create a Json Object with it.

JsonString ="{name:"MyNode", width:200, height:100}";
JSONObject yourJsonObject = new JSONObject(JsonString);
System.out.println("name=" + yourJsonObject.getString("name"));
System.out.println("width=" + yourJsonObject.getString("width"));

Solution 14 - Java

Jackson for big files, GSON for small files, and JSON.simple for handling both.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRobin RodricksView Question on Stackoverflow
Solution 1 - JavaZZ CoderView Answer on Stackoverflow
Solution 2 - JavaStaxManView Answer on Stackoverflow
Solution 3 - JavaAlok VaishView Answer on Stackoverflow
Solution 4 - JavasufinawazView Answer on Stackoverflow
Solution 5 - JavaEsteban KüberView Answer on Stackoverflow
Solution 6 - JavatzikView Answer on Stackoverflow
Solution 7 - JavaAshish AggarwalView Answer on Stackoverflow
Solution 8 - JavaKripzView Answer on Stackoverflow
Solution 9 - JavaJosue Alexander IbarraView Answer on Stackoverflow
Solution 10 - JavaAlireza FattahiView Answer on Stackoverflow
Solution 11 - JavaPierreView Answer on Stackoverflow
Solution 12 - JavaSteve ReedView Answer on Stackoverflow
Solution 13 - JavarAmView Answer on Stackoverflow
Solution 14 - JavaSpartanView Answer on Stackoverflow