0

我有 XML,它可以是任何结构,如下所示。因此没有用于实例化的 POJO 类。如您所见,我有嵌套数组(在这种情况下reservations是两个数组,reservation每个数组reservation都有简单的元素和数组rooms- 但这只是示例 - 可能有更多数组和嵌套数组)。

<reservations>
    <reservation>
        <id>1318504</id>
        <add_date>2020-12-10 12:48:09</add_date>
        <rooms>  
            <room>
                <id>28902</id>
                <floor>2</floor>
            </room>  
            <room>
                <id>28903</id>
                <floor>3</floor>
            </room>
        </rooms>
    </reservation >
    <reservation>
        <id>1318501</id>
        <add_date>2021-05-07 07:47:05</add_date>
        <rooms>
            <room>
                <id>5</id>
                <floor>25</floor>
            </room>
            <room>
                <id>6</id>
            </room>
        </rooms>
    </reservation>
</reservations>

我需要将其转换为 Json:

{
   "reservations":[
      {
         "id":"1318504",
         "add_date":"2020-12-10 12:48:09",
         "rooms":[
            {
               "id":"28902",
               "floor":2
               
            },
            {
               "id":"28903",
               "floor":3
            }
         ]
      },
      {
         "id":"1318501",
         "add_date":"2021-05-07 07:47:05",
         "rooms":[
            {
               "id":"5",
               "floor":25
               
            },
            {
               "id":"6"
            }
         ]
      }
   ]
}

 

我已经阅读了很多关于将 XML 转换为 Json 的主题。我试过类似的东西:

  1. json.org

    JSONObject xmlJSONObj = XML.toJSONObject(xmlString);

  2. 杰克逊

    JsonNode node = new XmlMapper().readTree(xmlContent);

  3. 下划线-java

    String jsonString = U.xmlToJson(xmlContent)

等等。Bu 结果,在最好的情况下是这样的:

{
   "reservations":{
      "reservation":[
         {
            "rooms":{
               "room":[
                  {
                     "id":28902,
                     "floor":2
                  },
                  {
                     "id":28903,
                     "floor":3
                  }
               ]
            },
            "add_date":"2020-12-10 12:48:09",
            "id":1318504
         },
         {
            "rooms":{
               "room":[
                  {
                     "id":5,
                     "floor":25
                  },
                  {
                     "id":6
                  }
               ]
            },
            "add_date":"2021-05-07 07:47:05",
            "id":1318501
         }
      ]
   }
}

我不需要像reservationand这样的节点room。你能帮我解决这个问题吗?我可以使用 xml 或 json 进行操作,但没有这些节点的表单是我的目标。

4

1 回答 1

0

解决方案:

import com.github.underscore.U;

    String xml = "<reservations>\n"
          + "    <reservation>\n"
          + "        <id>1318504</id>\n"
          + "        <add_date>2020-12-10 12:48:09</add_date>\n"
          + "        <rooms>  \n"
          + "            <room>\n"
          + "                <id>28902</id>\n"
          + "                <floor>2</floor>\n"
          + "            </room>  \n"
          + "            <room>\n"
          + "                <id>28903</id>\n"
          + "                <floor>3</floor>\n"
          + "            </room>\n"
          + "        </rooms>\n"
          + "    </reservation >\n"
          + "    <reservation>\n"
          + "        <id>1318501</id>\n"
          + "        <add_date>2021-05-07 07:47:05</add_date>\n"
          + "        <rooms>\n"
          + "            <room>\n"
          + "                <id>5</id>\n"
          + "                <floor>25</floor>\n"
          + "            </room>\n"
          + "            <room>\n"
          + "                <id>6</id>\n"
          + "            </room>\n"
          + "        </rooms>\n"
          + "    </reservation>\n"
          + "</reservations>";
    Map<String, Object> map = U.fromXmlMap(xml);
    U.set(map, "reservations", U.get(map, "reservations.reservation"));
    List<Map<String, Object>> list = U.get(map, "reservations");
    for (Map<String, Object> item : list) {
        U.set(item, "rooms", U.get(item, "rooms.room"));
    }
    System.out.println(U.toJson(map));

结果:

{
  "reservations": [
    {
      "id": "1318504",
      "add_date": "2020-12-10 12:48:09",
      "rooms": [
        {
          "id": "28902",
          "floor": "2"
        },
        {
          "id": "28903",
          "floor": "3"
        }
      ]
    },
    {
      "id": "1318501",
      "add_date": "2021-05-07 07:47:05",
      "rooms": [
        {
          "id": "5",
          "floor": "25"
        },
        {
          "id": "6"
        }
      ]
    }
  ],
  "#omit-xml-declaration": "yes"
}
于 2020-07-23T11:48:11.013 回答