Rami Rami - 16 days ago 5
Java Question

Strange "nameValuePairs" key appear when using Gson

I am trying to rebuild an

Object
from its fields( i get the fields as a JSONObject), something like this:

JSONObject jObj = new JSONObject();

JSONObject jObj1 = new JSONObject();
JSONObject jObj2 = new JSONObject();

JSONObject jObj21 = new JSONObject();
JSONObject jObj22 = new JSONObject();

jObj1.put("jObj11", "value11");
jObj1.put("jObj12", "value12");


jObj21.put("jObj211", "value211"); // level 2
jObj21.put("jObj212", "value212");
jObj21.put("jObj213", "value213");

jObj22.put("jObj221", "value221");
jObj22.put("jObj222", "value222");
jObj22.put("jObj223", "value223");

jObj2.put("jObj21", jObj21); // level 1
jObj2.put("jObj22", jObj22);

jObj.put("jObj1", jObj1); // level 0
jObj.put("jObj2", jObj2);


I use those lines to get Json from an
Obeject


GsonBuilder builder = new GsonBuilder();
Gson gSon = builder.create();
gSon.toJSon(jObj);


The Problem is when i parse the main
Object
( jObj ) with Gson, i found an extra key named
"nameValuePairs"
. So why i get this key?

Notice:


  • If i do :
    jObj.toString();
    on Log, this key disappear.

  • If i do :
    jObj.opt("nameValuePairs");
    i have Null as result (like there is no key named "nameValuePairs").



This is my actual result:

enter image description here

And this is what i expect to have:

enter image description here

I found something similar to my problem, but it doesn't help.

Is there someone who have a solution/workaround or can explain me the origin of this key?

Thanks.

Answer

Try to use Gson's JsonObject instead of JSONObject like this:

 JsonObject jObj = new JsonObject();

    JsonObject jObj1 = new JsonObject();
    JsonObject jObj2 = new JsonObject();

    JsonObject jObj21 = new JsonObject();
    JsonObject jObj22 = new JsonObject();

    jObj1.addProperty("jObj11", "value11");
    jObj1.addProperty("jObj12", "value12");


    jObj21.addProperty("jObj211", "value211"); // level 2
    jObj21.addProperty("jObj212", "value212");
    jObj21.addProperty("jObj213", "value213");

    jObj22.addProperty("jObj221", "value221");
    jObj22.addProperty("jObj222", "value222");
    jObj22.addProperty("jObj223", "value223");

    jObj2.add("jObj21", jObj21);  // level 1
    jObj2.add("jObj22", jObj22);

    jObj.add("jObj1", jObj1); // level 0
    jObj.add("jObj2", jObj2);

    String json = new Gson().toJson(jObj);
Comments