Как удалить элементы из json при разборе из xml с помощью java - PullRequest
0 голосов
/ 09 июля 2020
import org.json.JSONObject;
import org.json.XML;

public class Example {
        public static void main(String[] args) {
        String xmlString = "<users><user name=test1 age=20></user><type><direct num=3></direct></type><report sub=eng score=30></report></users>";
        JSONObject jsonObject = XML.toJSONObject(xmlString);
        System.out.println(jsonObject);
    }
}

Я могу удалить элементы после преобразования из xml в json. Но на самом деле мне нужно, чтобы элементы или атрибуты были удалены во время самого преобразования.

Мой требуемый результат:

{
  "users": {
    "report": {
      "score": 30
    },
    "type": {
      "direct": {
        "num": 3
      }
    },
    "user": {
      "age": 20
    }
  }
}

Ответы [ 2 ]

1 голос
/ 09 июля 2020
Класс

XML не предоставляет методов для исключения тегов. Одно из возможных решений - обновить строку, чтобы удалить теги, как показано ниже,

например, чтобы исключить type тег,

String splits[] = xmlString.split("(<\\/type>|<type>)");
xmlString = splits[0]+splits[2];

JSONObject jsonObject = XML.toJSONObject(xmlString);
System.out.println(jsonObject);

Вывод:

{"пользователей ": {" report ": {" sub ":" eng "," score ": 30}," user ": {" name ":" test1 "," age ": 20}}}

Чтобы удалить элемент имени из пользовательского тега,

String xmlString = "<users><user name=test1 age=20></user><type><direct num=3></direct></type><report sub=eng score=30></report></users>";

//split by user tags
String splits[] = xmlString.split("(<\\/user>|<user )");

//remove name filed and combine other elements
String user1 = Arrays.stream(splits[1].split(" "))
        .filter(s->!s.contains("name"))
        .collect(Collectors.joining(" "));

//merge strings and user tag
xmlString = splits[0] + "<user " + user1 + "</user>" + splits[2];

JSONObject jsonObject = XML.toJSONObject(xmlString);

Вывод ::

{
    "users": {
        "report": {
            "sub": "eng",
            "score": 30
        },
        "type": {
            "direct": {
                "num": 3
            }
        },
        "user": {
            "age": 20
        }
    }
}

ОБНОВЛЕНИЕ: Лучшим решением было бы удалить из JsonObject,

jsonObject.getJSONObject("users").getJSONObject("user").remove("name")
0 голосов
/ 09 июля 2020
Пакет

org. json. XML не предусматривает внутренних изменений XML. Если вам необходимо это использовать, вы должны сами внести необходимые изменения в json. В противном случае вы можете предварительно обработать xml с помощью парсера java default xml, преобразовать его в строку, а затем преобразовать в json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...