Джексон - перебирать массив и манипулировать его значением

У меня есть этот файл json:

{
  "gateway_name": "gateway1",
  "fields": [
    {"name":"Code", "value":""},
    {"name":"PaymentId", "value":""},
    {"name":"RefNo", "value":""}
  ]
}

Я пытаюсь проанализировать этот файл с помощью средства отображения объектов Jackson и выполнить итерацию по массиву fields. Чего я хочу добиться, так это того, что когда name равно RefNo, манипулируйте value до 1112, чтобы он стал:

{
  "gateway_name": "gateway1",
  "fields": [
    {"name":"Code", "value":""},
    {"name":"PaymentId", "value":""},
    {"name":"RefNo", "value":"1112"}
  ]
}

Как проверить значение field и установить для value значение 1112?

Что я пробовал до этого момента:

  Resource resource = new ClassPathResource("gateway-fields.json");  //read from json file
  JsonFactory jsonFactory = new JsonFactory();
  ObjectMapper objectMapper = new ObjectMapper(jsonFactory);

  JsonNode arrayNode = objectMapper.readTree(resource.getFile()).get("fields");

  if (arrayNode.isArray()) {
      for (JsonNode jsonNode : arrayNode) {
          JsonNode nameFieldNode = jsonNode.get("name");
          JsonNode valueFieldNode = jsonNode.get("value");

          //Stcuked here
          IF nameFieldNode is "RefNo"
          THEN SET valueFieldNode to "1112"
      }
  }

person hades    schedule 14.08.2018    source источник


Ответы (1)


Сравните с именем и обновите этот элемент json.

Resource resource = new ClassPathResource("gateway-fields.json");  //read from json file
      JsonFactory jsonFactory = new JsonFactory();
      ObjectMapper objectMapper = new ObjectMapper(jsonFactory);

      JsonNode arrayNode = objectMapper.readTree(resource.getFile()).get("fields");

      if (arrayNode.isArray()) {
          for (JsonNode jsonNode : arrayNode) {
              String nameFieldNode = jsonNode.get("name").asText();    
              if("RefNo".equals(nameFieldNode)){
                     ((ObjectNode)jsonNode).put("name", "1112");
              }
          }
      }
person Kaustubh Khare    schedule 14.08.2018
comment
ты имеешь в виду String nameFieldNode = jsonNode.get("name").asText(); - person Scary Wombat; 14.08.2018
comment
@ScaryWombat о! Извините. Виноват. Спасибо, что поправили меня. - person Kaustubh Khare; 14.08.2018