Учитывая этот JSON, прочитанный из файла:
{
"Book": "Test",
"Subscription": [{
"RateIt": [{
"Id": "1234",
"Size": "XL",
"RateMe": [{
"id": "5678",
"Pages": ""
}],
"Test_Demo": null
}],
"DemoID": "test1111",
"subNumber": "9999"
}],
"Author_FirstName": "Test"
}
Я попытался обновить поле DemoID
другим значением следующим образом:
ObjectMapper mapper = new ObjectMapper();
JsonNode requestParams = mapper.readTree(new File("src/test/resources/myFile.json"));
JsonNode subscriptionPath = requestParams.at("/Subscription");
System.out.println(subscriptionPath ); //value was retrieved OK
((ObjectNode) subscriptionPath).put("DemoID", "test0000"); //error on this line
Но получил исключение:
java.lang.ClassCastException: com.fasterxml.jackson.databind.node.TextNode cannot be cast to com.fasterxml.jackson.databind.node.ObjectNode
Я также попытался использовать DemoIDpath вместо этого, но получил то же исключение:
JsonNode idPath = requestParams.at("/Subscription/0/DemoID");//path was found OK
((ObjectNode) idPath).put("DemoID", "test0000"); // error on this line
Что я делаю не так с использованием ObjectNode
?
Subscription
— это массив. Вы можете увидеть это лучше с правильным форматированием:
{
"Book": "Test",
"Subscription": [
{
"RateIt": [
{
"Id": "1234",
"Size": "XL",
"RateMe": [
{
"id": "5678",
"Pages": ""
}
],
"Test_Demo": null
}
],
"DemoID": "test1111",
"subNumber": "9999"
}
],
"Author_FirstName": "Test"
}
Измените код на:
((ObjectNode) subscriptionPath.get(0)).put("DemoID", "test0000");
Это отлично работает @PeterMmm. Почему
get(0)
хотя есть только один узелSubscription
? Это то, чего мне не хватало.