Rostyslav Roshak :
I have the following JSON:
{
"some_key": "{\"a\": 1, \"b\": \"text\"}"
}
As you can see some_key
field is not a JSON object it is a string, that contains valid JSON.
I would like to parse it into following structure:
class Foo {
Bar some_key;
}
class Bar {
int a;
String b;
}
UPDATE:
class A and B, has getters and setters, constructors. I haven't show them to keep sample short and simple.
I can't edit the weird structure of the JSON.
The question is how to ask Jackson parse the inner string field as JSON object.
df778899 :
@t_liang is very close - just need a bit more room than a comment to show the working example...
With:
class Foo {
@JsonDeserialize(using = BarDeserializer.class)
private Bar some_key;
}
Then the current ObjectMapper
is actually the JsonParser.getCodec()
:
public class BarDeserializer extends JsonDeserializer<Bar> {
@Override
public Bar deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
String text = p.getText();
ObjectMapper mapper = (ObjectMapper) p.getCodec();
return mapper.readValue(text, Bar.class);
}
}
Then this...
ObjectMapper mapper = new ObjectMapper();
Foo foo = mapper.readValue(
"{ \"some_key\": \"{\\\"a\\\": 1, \\\"b\\\": \\\"text\\\"}\" }",
Foo.class);
System.out.println(foo.getSome_key());
... shows the expected value:
Bar [a=1, b=text]
Guess you like
Origin http://10.200.1.11:23101/article/api/json?id=450822&siteId=1