Ignore a key in JSON to XML conversion

Pratik Rawlekar :

I am using json library to convert json to xml but while converting I want to ignore a nested json object to be converted to xml tags.

eg.

Plane json is as :

{"id":"9568","name":"Customer Analysis","group":"demo","param":{"globalSettings":{"showLegends":false,"legendPosition":"bottom center"}}}

JSONObject json = new JSONObject("{\"id\":\"9568\",\"name\":\"Customer Analysis\",\"group\":\"demo\",\"param\":{\"globalSettings\":{\"showLegends\":false,\"legendPosition\":\"bottom center\"}}}");

    String xml = XML.toString(json);
    System.out.println(xml);

Now in above example, I want in xml with a json as it is inside. Whereas now various elements are created for showLegends and legendPosition inside globalSettings.

Current XML is as follows :

<name>Customer Analysis</name>
<id>9568</id>
<group>demo</group>
<param>
  <globalSettings>
     <showLegends>false</showLegends>
     <legendPosition>bottom center</legendPosition>
  </globalSettings>
</param>

Expected XML should be as follows :

<name>Customer Analysis</name>
<id>9568</id>
<group>demo</group>
<param>
  <globalSettings>
     {"showLegends":false,"legendPosition":"bottom center"}
  </globalSettings>
</param>

How can I handle this?

Madplay :

I think you need to tweak JSON before converting. Can you try this below?

String json = "{\n" +
        "   \"user\": \"gerry\",\n" +
        "   \"likes\": [1, 2, 4],\n" +
        "   \"followers\": {\n" +
        "      \"options\": {\n" +
        "        \"key1\": \"a\",\n" +
        "        \"key2\": \"b\"\n" +
        "      }        \n" +
        "   }\n" +
        "}";

JSONObject jsonObject = new JSONObject(json);
JSONObject followers = jsonObject.getJSONObject("followers");

String options = followers.optString("options");
followers.put("options", options);

String s = XML.toString(jsonObject);
System.out.println(XML.unescape(s));

result:

<followers><options>{"key1":"a","key2":"b"}</options></followers><user>gerry</user><likes>[1,2,4]</likes>


Extra Question:

What if I don't want options as an xml element and it should be part of json?

String json = "{\n" +
        "   \"user\": \"gerry\",\n" +
        "   \"likes\": [1, 2, 4],\n" +
        "   \"followers\": {\n" +
        "      \"options\": {\n" +
        "        \"key1\": \"a\",\n" +
        "        \"key2\": \"b\"\n" +
        "      }        \n" +
        "   }\n" +
        "}";

JSONObject jsonObject = new JSONObject(json);
jsonObject.put("followers", jsonObject.optString("followers"));

// org.json 20180813
String s = XML.toString(jsonObject);
System.out.println(XML.unescape(s));

result:

<followers>{"options":{"key1":"a","key2":"b"}}</followers><user>gerry</user><likes>1</likes><likes>2</likes><likes>4</likes>

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=149532&siteId=1