从json部分修改java对象

时间:2014-08-05 10:41:58

标签: java json parsing field gson

我希望能够从JSON字符串修改java对象,而无需指定每个字段。例如:

package controller.test;

import com.google.gson.Gson;

public class Tests {
    public Tests() {
        test();
    }

    private void test() {
        Person realPerson = new Person();
        realPerson.setName("Bobby");
        realPerson.setAge(28);

        // Now trying to set the name from a JSON string
        Gson gson = new Gson();
        Person modifiedPerson = gson.fromJson("{\"name\":\"Justin\"}", Person.class);

        System.out.println(gson.toJson(realPerson));
        // prints: {"name":"Bobby","age":28}
        System.out.println(gson.toJson(modifiedPerson));
        // prints: {"name":"Justin","age":0}
    }

    public static void main(String[] args) {
        new Tests();
    }
}

class Person {
    private String name;
    private int age;

    public Person() {
    }

    // Getters & setters are added here
}

如何在不必指定年龄的情况下将realPerson.name从“Bobby”修改为“Justin”?

对于像这个例子这样的小班级来说,这不是一个大问题:我可以单独检查和设置每个字段。但我的班级包含138个(!)不同的字段。

编辑:

我的问题可能解释得很糟糕,让我总结一下我的问题:

我有一个类的实例(大约130个不同的字段都设置为单独的值)。

我希望能够使用JSON字符串修改此实例中的值。

示例JSON字符串:{“field13”:“5”,“field100”:“2”}

有没有办法在不必为我的java类中的每个字段编写特定代码的情况下完成此任务?

1 个答案:

答案 0 :(得分:1)

如果可以选择使用Jackson作为反序列化器,则可以使用数据持有者中的注释:

@JsonAnySetter
public void set(String name, Object value);
@JsonAnyGetter
public Map<String, Object> get();