我正在使用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用于整个项目。
答案 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}