Во-первых, ваша строка JSON не является действительной , поскольку перед левой скобкой в jsonStringValue
стоит лишняя двойная кавычка. Действительный выглядит так:
{
"stringValue" : "someString",
"collectionValue" : ["123456", "234567", "hello"],
"jsonStringValue" : {
"someKey" : 1,
"anotherKey" : {
"againKey" : "value"
}
},
"booleanValue" : true
}
Во-вторых, jsonStringValue
- это не простой объект String
, это вложенные объекты JSON. Следовательно, вы должны создать соответствующие классы для него следующим образом:
Class SomeClass {
private String stringValue;
private List<String> collectionValue = new ArrayList<>();
private JsonStringValue jsonStringValue;
private boolean booleanValue;
//general getters and setters
}
Class JsonStringValue {
private int someKey;
private AnotherKey anotherKey;
//general getters and setters
}
Class AnotherKey {
private String againKey;
//general getters and setters
}
Наконец, данную строку JSON можно преобразовать в SomeClass
POJO с помощью ObjectMapper
.
ObjectMapper mapper = new ObjectMapper();
SomeClass someClass = mapper.readValue(jsonStr, SomeClass.class);
System.out.println(someClass.getjsonStringValue().getAnotherKey().getAgainKey());
Вывод на консоль:
значение
ОБНОВЛЕНО
Если вы все еще хотите преобразовать объект jsonStringValue
в String
, альтернативный способ показан следующим образом:
Создайте 2 класса - SomeClassOriginal
и SomeClass
, единственная разница между ними - тип данных jsonStringValue
. Первый - JsonNode
, а позже - String
.
Class SomeClassOriginal {
private String stringValue;
private List<String> collectionValue = new ArrayList<>();
private JsonNode jsonStringValue;
private boolean booleanValue;
//general getters and setters
}
Class SomeClass {
private String stringValue;
private List<String> collectionValue = new ArrayList<>();
private String jsonStringValue;
private boolean booleanValue;
public SomeClass(SomeClassOriginal someClassOriginal) {
super();
this.stringValue = someClassOriginal.stringValue;
this.collectionValue = someClassOriginal.collectionValue ;
this.jsonStringValue= someClassOriginal.jsonStringValue.toString();
this.booleanValue= someClassOriginal.booleanValue;
}
//general getters and setters
}
Тогда вы можете получить jsonStringValue
как String
, например:
ObjectMapper mapper = new ObjectMapper();
SomeClassOriginal someClassOriginal = mapper.readValue(jsonStr, SomeClassOriginal.class);
SomeClass someClass = new SomeClass(SomeClassOriginal);
System.out.println(someClass.getjsonStringValue());
Вывод на консоль:
{"someKey": 1, "anotherKey": {"againKey": "value"}}