我在我的项目中使用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。所以我有一个可以在其中获取JSONString作为String的bean。所以目前我可以使用下面的bean结构来获取对象的响应:

public class response {
Data data;
}

public class Data {
String id;
Object1 object1;
}

public class Object1 {
String jsonString;
}


但是上面的jsonString包含一个json形式的字符串,因此我只想在运行时将此JSON字符串转换为JSON对象,仅当创建其他对象并将其所有内容转储到同一个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;
}


请指导我如何做。

最佳答案

您可以通过以下方式使用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);
}

07-28 03:28
查看更多