需要使用net.sf.json JsonSerializer将POJO转换为JSON并保持POJO属性排序

时间:2014-08-27 19:33:42

标签: json pojo json-lib

我正在使用net.sf.json API进行所有JSON操作。我正在尝试使用JSONSerializer.toJSON(POJO,JsonConfig)将POJO转换为JSON。 我希望生成的JSON具有与POJO中指定的顺序相同的POJO属性。但我所看到的是 序列化结果按字母顺序排列POJO属性。

public class Person {

    private String name;
    private int age;

    // getters and setters`enter code here`
}

Person p = new Person();
p.setName("John");
p.setAge(50);

JSONSerializer.toJSON(p) // {"age":50,"name":"John"}

我其实想要{“name”:“John”,“age”:50}

我试过这个黑客,

public class Person {

    private String _1_name;
    private int _2_age;

    // getters and setters
}

JsonConfig config = new JsonConfig();

config.registerJsonPropertyNameProcessor(Person.class, new PropertyNameProcessor() {

        @Override
        public String processPropertyName(Class arg0, String arg1) {
            if (arg1.equals("_2_age"))
                return "age";
            if (arg1.equals("_1_name"))
                return "name";          
            return arg1;
        }
    });

JSONSerializer.toJSON(p, config); // {"name":"John","age":50}`

还有更好的方法吗?

我不想转移到具有更好功能的Jackson,因为net.sf.json用于整个项目。

1 个答案:

答案 0 :(得分:1)

我尝试了这种方法,我猜这似乎更好

Map json = (JSONObject) JSONSerializer.toJSON(p);
System.out.println(json); // {"age":50,"name":"John"}
Map newJson = new LinkedHashMap();

// creating a new linkedhashmap with the desired order
if (json.containsKey("name")) {
    newJson.put("name", json.get("name"));
}

if (json.containsKey("age")) {
    newJson.put("age", json.get("age"));
}

System.out.println(JSONObject.fromObject(newJson)); // {"name":"George","age":50}