在运行时将作为JSON对象一部分的JSON String转换为JSON对象

时间:2016-07-21 19:44:30

标签: java json spring jackson gson

我在项目中使用REST模板消耗REST Web服务,该模板返回如下的JSON:

{"data": [{
        "id": "INT-1468819244684-event-no-97",
        "object1": {
            "JSONString": "{\"object2\":[{\"object3\":\"value3\",\"object4\":\"value4\"}]}"
        }
    }]

}

在使用上述JSON响应时,我能够创建一个bean类,并能够将JSON对象/值转储到同一个中。

但问题是json响应上面包含如下字符串:

"JSONString": "{\"object2\":[{\"object3\":\"value3\",\"object4\":\"value4\"}]}"

实际上是一个json。所以我有一个bean,我可以在其中获取JSONString作为String。所以目前我可以使用下面的bean结构来获取对象中的响应:

public class response {
Data data;
}

public class Data {
String id;
Object1 object1;
}

public class Object1 {
String jsonString;
}

但是jsonString上面包含一个json形式的字符串,所以我想在运行时以某种方式将这个JSON String转换为JSON Object,只有在创建其他对象时才将其所有内容转储到同一个bean中,以便应用程序应该是准备好使用它的内容。理想情况下,我的bean层次结构应该如下所示:

public class response {
Data data;
}

public class Data {
String id;
Object1 object1;
}


public class Object1 {
JSONString jsonString;
}

public class JSONString {
Object2 object2;
}

public class Object2 {
String object3;
String object4;
}

请指导我如何做同样的事。

1 个答案:

答案 0 :(得分:3)

你可以用这种方式使用Jackson的ObjectMapper.readValue:

// Create or use your existing ObjectMapper
ObjectMapper om = new ObjectMapper();

@JsonProperty("JSONString")
public String getJSONString() {
    if (this.jsonString == null)
        return null;
    return om.writeValueAsString(this.jsonString);
}

public void setJSONString(String s) {
    this.jsonString = om.readValue(s, JSONString.class);
}