Есть ли способ сделать частичное обновление для блока атрибутов JSON, используя Jackson Streaming API - PullRequest
0 голосов
/ 26 сентября 2019

Мне нужно выполнить частичное обновление / запись для значений существующих атрибутов конкретного блока 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"
     } 
   }
...