Мне нужно выполнить частичное обновление / запись для значений существующих атрибутов конкретного блока JSON в файле .JSON с помощью потокового API JACKSON.
Этот код ниже предназначен для чтения блока содержимого JSON с использованиемМетод токена
Мой пример JSON выглядит следующим образом
{
"changeRequestId" : "1007959",
"attributeValuePair" : {
"AIMSID" : "test1324",
"TIMING_IMPACT" : "testSep13",
"CAUSAL_FACTOR_CODE_1" : "B6"
}
},
{
"changeRequestId" : "1007939",
"attributeValuePair" : {
"AIMSID" : "test13324",
"TIMING_IMPACT" : "testS3ep13",
"CAUSAL_FACTOR_CODE_1" : "B36"
}
}
И выше JSON продолжается с тысячами записей. Логика потокового чтения выполнена с использованием кода ниже
try (JsonParser jParser = new JsonFactory()
.createParser(new
File("c:\\projects\\changeObject.json"));) {
// loop until token equal to "}"
while (jParser.nextToken() != JsonToken.END_OBJECT) {
String fieldname = jParser.getCurrentName();
if ("CG".equals(fieldname)) {
// current token is "name",
// move to next, which is "name"'s value
jParser.nextToken();
System.out.println(jParser.getText());
}
if ("TimingImpact".equals(fieldname)) {
jParser.nextToken();
System.out.println(jParser.getIntValue());
}
if ("AIMSID".equals(fieldname)) {
if (jParser.nextToken() == JsonToken.START_ARRAY) {
// messages is array, loop until token equal to "]"
while (jParser.nextToken() != JsonToken.END_ARRAY) {
System.out.println(jParser.getText());
}
}
}
}
Нужно только записывать / обновлять Специальное значение атрибута в блоке JSON, не касаясь других блоков.Например, я хотел изменить AIMSID: ID7897 и другие столбцы остаются такими же
{
"changeRequestId" : "1007959",
"attributeValuePair" : {
"AIMSID" : "ID1234",
"TIMING_IMPACT" : "impact123",
"CAUSAL_FACTOR_CODE_1" : "B6"
}
},
{
"changeRequestId" : "1007939",
"attributeValuePair" : {
"AIMSID" : "test13324",
"TIMING_IMPACT" : "testS3ep13",
"CAUSAL_FACTOR_CODE_1" : "B36"
}
}