Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Gson将一个字段转换为多个字段_Java_Json_Serialization_Gson - Fatal编程技术网

Java Gson将一个字段转换为多个字段

Java Gson将一个字段转换为多个字段,java,json,serialization,gson,Java,Json,Serialization,Gson,假设我已将以下对象序列化为json字符串: class Person { public final String name; public Person(String name) { this.name = name; } } Person p = new Person("Bob Falaway"); JsonObject json = gson.toJsonTree(p, Person.class).getAsJsonObject(); 现在我想反序列化它,但我想将名称拆分

假设我已将以下对象序列化为json字符串:

class Person {
    public final String name;
    public Person(String name) { this.name = name; }
}

Person p = new Person("Bob Falaway");
JsonObject json = gson.toJsonTree(p, Person.class).getAsJsonObject();
现在我想反序列化它,但我想将名称拆分为两个字段,
firstName
lastName
。我该怎么做

我希望最终的结果类似于:

class RefinedPerson {
    public final String firstName;
    public final String lastName;

    public String toString() { return String.format("%s %s", firstName, lastName); }
}

这在Gson中完全可能吗?

为类型注册您自己的
JsonSerializer
(或者
TypeAdapter
,如果您愿意的话)

比如:

@JsonAdapter(PersonSerializer.class)
class Person {
    private final String name;
    Person(final String name) {
        // Some validation...
        this.name = name;
    }

    String getName() {
        return this.name;
    }
}
class PersonSerializer implements JsonSerializer<Person> {
    @Override
    public JsonObject serialise(final Person src,
                                final Type personType,
                                final JsonSerializationContext context) {

        final JsonObject json = new JsonObject();
        final String[] names = src.getName().split(" ");
        // Some validation...

        json.addProperty("firstName", names[0]);
        json.addProperty("lastName", names[1]);
        return json;
    }
}
您的serialiser看起来像:

@JsonAdapter(PersonSerializer.class)
class Person {
    private final String name;
    Person(final String name) {
        // Some validation...
        this.name = name;
    }

    String getName() {
        return this.name;
    }
}
class PersonSerializer implements JsonSerializer<Person> {
    @Override
    public JsonObject serialise(final Person src,
                                final Type personType,
                                final JsonSerializationContext context) {

        final JsonObject json = new JsonObject();
        final String[] names = src.getName().split(" ");
        // Some validation...

        json.addProperty("firstName", names[0]);
        json.addProperty("lastName", names[1]);
        return json;
    }
}
类PersonSerializer实现JsonSerializer{
@凌驾
公共JsonObject序列化(最终用户src,
最终类型personType,
最终JsonSerializationContext(上下文){
final JsonObject json=new JsonObject();
最终字符串[]name=src.getName().split(“”);
//一些验证。。。
addProperty(“firstName”,名称[0]);
addProperty(“lastName”,名称[1]);
返回json;
}
}