GSON自动将JSON数组解包到Java对象

时间:2019-02-11 23:43:52

标签: java json gson

我需要将JSON响应映射到Java对象。我的Java类如下:

public class Response{
    private String status;
    private String message;
    ...
}

我正在使用的JSON无法控制,因此不能选择修改JSON。

{
    "status": ["Sucess"],
    "message": ["Some Message"],
    ...
}

我正在使用GSON进行转换。

final Response response = new Gson().fromJson(json, Response.class);

对象的每个属性都包装在JSON数组中。糟糕的设计,但我对此无能为力。 GSON中是否有任何东西可以自动检测到statusmessage不是我的Java对象中的数组,因此可以从JSON数组中解开第一个条目?

1 个答案:

答案 0 :(得分:1)

在设计自动化测试框架时,我陷入了类似的问题。

我建议您使用ObjectMapper将JSON键映射到POJO字段。

 public Response getResponseObject ()
    {

        Response object = null;
        ObjectMapper mapper = new ObjectMapper( );
        mapper.enable( DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY );  //<-- This will do the magic to accept as an array
        ClassLoader classLoader = ClassLoader.getSystemClassLoader();

        // assuming your json in data.json
        try ( InputStream in = classLoader.getResourceAsStream( ( data.json ) ) )
        {
            object = mapper.readValue( in, Response.class );
            System.out.println( ReflectionToStringBuilder.toString( object, ToStringStyle.MULTI_LINE_STYLE ) );
        }
        catch ( IOException e )
        {
            LOG.error( "Error occurred while creating Result object, cause:" + e.getMessage() );
        }
        return object;
    }

read more,希望对您有所帮助。