Недопустимый символ при преобразовании из JSON в XML с использованием jsonlib

#java #xml #json #xml-serialization #json-lib

#java #xml #json #xml-сериализация #json-lib

Вопрос:

Я пытаюсь преобразовать строку JSON в XML с помощью jsonlib в Java.

     JSONObject json = JSONObject.fromObject(jsonString); 
    XMLSerializer serializer = new XMLSerializer();
    String xml = serializer.write( json );  
    System.out.println(xml);
 

Ошибка, которую я получаю,

     nu.xom.IllegalNameException: 0x24 is not a legal NCName character
 

Проблема здесь в том, что у меня есть некоторые свойства в моем JSON, которые являются недопустимыми символами XML. например. У меня есть свойство с именем «$ t». XmlSerializer выдает исключение при попытке создать XML-тег с этим именем, поскольку $ не допускается в именах тегов XML. Есть ли какой-либо способ, которым я могу переопределить эту проверку правильности XML, выполняемую сериализатором?

Комментарии:

1. почему вы хотите переопределить эту проверку (и сгенерировать недопустимый xml)?

2. Я пытаюсь использовать Google REST API. После запуска веб-сервиса я получаю ответ JSON. У меня есть средство просмотра дерева, которое отображает XML в древовидной структуре. Поэтому я должен преобразовать JSON в XML, чтобы отобразить его в виде дерева. Но в JSON «$» является допустимым именем свойства. Google API возвращает имена свойств, такие как «$ t», «GCal $ timesCleaned» и т. Д. Итак, я получаю сообщение об ошибке при преобразовании его в XML.

Ответ №1:

Сначала я бы предложил добавить язык, который вы используете (это Java, верно?).

Вы можете переопределить метод, в котором он проверяет ваше имя XML-тега, чтобы ничего не делать.

Ответ №2:

Я взглянул на спецификацию для json-lib XmlSerializer, и, к моему удивлению, у него, похоже, нет возможности для сериализации объекта JSON, ключи которого не являются допустимыми именами XML. Если это так, то я думаю, вам нужно будет найти другую библиотеку.

Ответ №3:

Вы можете выполнить цикл json.keySet (при необходимости рекурсивно) и заменить недопустимые ключи допустимыми (используя remove и add ).