Unexpected json result of org.json & org.json.simple

229 Views Asked by At

Issue encounter

  1. org.json: null value is missing
  2. org.json.simple: Object[] doesn't parse correctly

Expected Result:

[null,true,123,123.456,"","123asd'\"/\",[null],[true],[123],[123.456],[""],["123asd'\"/\"],[null],[true],[123],[123.456],[""],["123asd'\"/\"],{"0":null},{"0":true},{"0":123},{"0":123.456},{"0":""},{"0":"123asd'\"/\"}]

Actual Result for org.json: null value is missing

[null,true,123,123.456,"","123asd'\"/\",[null],[true],[123],[123.456],[""],["123asd'\"/\"],[null],[true],[123],[123.456],[""],["123asd'\"/\"],{},{"0":true},{"0":123},{"0":123.456},{"0":""},{"0":"123asd'\"/\"}]

Actual Result for org.json.sample: Object[] is not display correctly

[null,true,123,123.456,"","123asd'\"/\",[Ljava.lang.Object;@20ad9418,[Ljava.lang.Object;@31cefde0,[Ljava.lang.Object;@439f5b3d,[Ljava.lang.Object;@1d56ce6a,[Ljava.lang.Object;@5197848c,[Ljava.lang.Object;@17f052a3,[null],[true],[123],[123.456],[""],["123asd'\"/\"],{"0":null},{"0":true},{"0":123},{"0":123.456},{"0":""},{"0":"123asd'\"/\"}]

import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.simple.JSONValue;

public class Main {

    public static void main(String[] args) {
        Map map = new LinkedHashMap();
        map.put(map.size(), null);
        map.put(map.size(), true);
        map.put(map.size(), 123);
        map.put(map.size(), 123.0);
        map.put(map.size(), 123.456);
        map.put(map.size(), "");
        map.put(map.size(), "123asd'\"/\\");
        map.put(map.size(), new Object[]{null});
        map.put(map.size(), new Object[]{true});
        map.put(map.size(), new Object[]{123});
        map.put(map.size(), new Object[]{123.0});
        map.put(map.size(), new Object[]{123.456});
        map.put(map.size(), new Object[]{""});
        map.put(map.size(), new Object[]{"123asd'\"/\\"});

        List list_temp = new LinkedList();
        list_temp.add(null);
        map.put(map.size(), list_temp);

        list_temp = new LinkedList();
        list_temp.add(true);
        map.put(map.size(), list_temp);

        list_temp = new LinkedList();
        list_temp.add(123);
        map.put(map.size(), list_temp);

        list_temp = new LinkedList();
        list_temp.add(123.0);
        map.put(map.size(), list_temp);

        list_temp = new LinkedList();
        list_temp.add(123.456);
        map.put(map.size(), list_temp);

        list_temp = new LinkedList();
        list_temp.add("");
        map.put(map.size(), list_temp);

        list_temp = new LinkedList();
        list_temp.add("123asd'\"/\\");
        map.put(map.size(), list_temp);

        Map map_temp = new LinkedHashMap();
        map_temp.put(map_temp.size(), null);
        map.put(map.size(), map_temp);
        map_temp = new LinkedHashMap();
        map_temp.put(map_temp.size(), true);
        map.put(map.size(), map_temp);
        map_temp = new LinkedHashMap();
        map_temp.put(map_temp.size(), 123);
        map.put(map.size(), map_temp);
        map_temp = new LinkedHashMap();
        map_temp.put(map_temp.size(), 123.0);
        map.put(map.size(), map_temp);
        map_temp = new LinkedHashMap();
        map_temp.put(map_temp.size(), 123.456);
        map.put(map.size(), map_temp);
        map_temp = new LinkedHashMap();
        map_temp.put(map_temp.size(), "");
        map.put(map.size(), map_temp);
        map_temp = new LinkedHashMap();
        map_temp.put(map_temp.size(), "123asd'\"/\\");
        map.put(map.size(), map_temp);

        List list = new LinkedList(map.values());

        //println(new JSONObject(map).toString());
        //println(JSONValue.toJSONString(map));
        println(new JSONArray(list).toString());
        println(JSONValue.toJSONString(list));
    }

    public static <T> void println(T p_t) {
        System.out.println(p_t);
    }

}
1

There are 1 best solutions below

1
On BEST ANSWER

These two libraries are very feature poor. They do the job for simple cases.

Your test has simply identified that org.json doesn't serialize Map entries where the value is null and org.json.simple doesn't have a special case for array types (and therefore defaults to their toString() method return value).