都知道JSONObject可以序列化对象但是能否改掉对象的属性名成呢?比如
public class Student{
   private String id;
   private String name;
   /* get set 方法省略 */
}
Action中读取到所有的记录
 List<Student> students = new ArrayList<Student>();
String s = JSONArray.fromObject(students).toString();
System.out.println(s);
输出结果为 [{"id":"1","name":"张三"}]
我想得到这样的结果:[{"id":"1","title":"张三"}] 就是原来属性名称为name,JSON格式想把属性名改成title,请大侠们支招!

解决方案 »

  1.   

    嗯是的啊,将原来的name改成title
      

  2.   

    不知道 这里用java的反射是不是可以修改属性,或者可以考虑 在构造一个对象把
      

  3.   

    除非在转换的入口处修改对象的属性。。不然肯定不行。。要是行的话。。那就是json API出bug了。。不排除你去改一下jar包里的API实现
      

  4.   

    为什么一定要转换呢,从来没看到过要转换,这个转换的话就要把后台转换json的东西改了,这个又麻烦又没实用价值,折腾这种非主流的东西没意思
      

  5.   

    把private String name;改为private String title;
    或者用replaceAll()函数把name替换成title。。或者用HashMap代替Student
    Map map = new HashMap();
    map.put("id","xxx");
    map.put("title","xxx");List<Map> students = new ArrayList<Map>();
    students.add(map);
    String s = JSONArray.fromObject(students).toString();
      

  6.   

    json不就是字符串么  replaceAll("title","name")就行了  然后在转化为json对象
      

  7.   

    Student增加:
      public String getTitle() {
        return this.name;
      }
    然后,
    JsonConfig config = new JsonConfig();
    config.registerPropertyExclusion(Student.class, "name");
    String s = JSONArray.fromObject(students, config).toString();
      

  8.   

    如果,Student类不能动,那么
        config.registerJsonPropertyNameProcessor(Student.class, new PropertyNameProcessor() {
          
          @Override
          public String processPropertyName(Class beanClass, String name) {
            if ("name".equals(name)) {
              return "title";
            }
            return name;
          }
        });JsonPropertyNameProcessor是java->json的时候,反过来,json->java的叫JavaPropertyNameProcessor
      

  9.   

    反正用好JsonConfig, json-lib还是非常之强大的