Java jackson - обновить массив в json - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в java Джексоне. Я хочу проанализировать json String и заменить один из имеющихся в нем массивов (размер которого равен 1) массивом размера 2, скопировав то же содержимое значения массива. Например: Вход json файл

{
  "order_info": {
    "order_number": "123456",
    "order_date": "2019-11-08T10:23:29.502Z",
    "attributes": {
      "checkout_locale": "en_US"
    },
    "order_items": [
      {
        "categories": [
          "Clothing"
        ],
        "is_backordered": false,
        "vendors": [
          {
            "name": "zxcx"
          }
        ],
        "discount_amount": 0,
        "final_sale_date": "2019-03-01T20:07:16Z"
      }
    ]
  }
}

Выход json требуется:

{
  "order_info": {
    "order_number": "123456",
    "order_date": "2019-11-08T10:23:29.502Z",
    "attributes": {
      "checkout_locale": "en_US"
    },
    "order_items": [
      {
        "categories": [
          "Clothing"
        ],
        "is_backordered": false,
        "vendors": [
          {
            "name": "zxcx"
          }
        ],
        "discount_amount": 0,
        "final_sale_date": "2019-03-01T20:07:16Z"
      },
      {
        "categories": [
          "Clothing"
        ],
        "is_backordered": false,
        "vendors": [
          {
            "name": "zxcx"
          }
        ],
        "discount_amount": 0,
        "final_sale_date": "2019-03-01T20:07:16Z"
      }
    ]
  }
}

Я пробовал код, как показано ниже:

   ObjectNode objectNode = (ObjectNode) mapper.readTree(ordersApiBasePayload);
   ArrayNode nodeArray = (ArrayNode) jsonNode.get("order_info").get("order_items");
   ArrayNode items = objectNode.putArray("order_items");
   items.add(nodeArray.get(0));
   items.add(nodeArray.get(0));

Но, выполнив таким образом, я не заменяю существующие order_items новыми двумя order_items. Я получаю два новых элемента order_items в конце json, как показано ниже:

{
  "order_info": {
    "order_number": "123456",
    "order_date": "2019-11-08T10:23:29.502Z",
    "attributes": {
      "checkout_locale": "en_US"
    },
    "order_items": [
      {
        "categories": [
          "Clothing"
        ],
        "is_backordered": false,
        "vendors": [
          {
            "name": "zxcx"
          }
        ],
        "discount_amount": 0,
        "final_sale_date": "2019-03-01T20:07:16Z"
      }
    ]
  },
  "order_items": [
    {
      "categories": [
        "Clothing"
      ],
      "is_backordered": false,
      "vendors": [
        {
          "name": "zxcx"
        }
      ],
      "discount_amount": 0,
      "final_sale_date": "2019-03-01T20:07:16Z"
    },
    {
      "categories": [
        "Clothing"
      ],
      "is_backordered": false,
      "vendors": [
        {
          "name": "zxcx"
        }
      ],
      "discount_amount": 0,
      "final_sale_date": "2019-03-01T20:07:16Z"
    }
  ]
}
...