Java XStream с HashMap - PullRequest
       8

Java XStream с HashMap

6 голосов
/ 15 ноября 2011

Я хочу использовать XStream для преобразования хеша java в хеш json. Я чувствую, что это должно быть проще, чем кажется. То, что я ищу, это способ сделать:

Map<String, String> map = new HashMap<String, String>();
map.put("first", "value1");
map.put("second", "value2");

стать

{'first' : 'value1', 'second' : 'value2' }

Закрытие, которое я имею, преобразует его в серию массивов.

XStream xstream = new XStream(new JettisonMappedXmlDriver() {
    public HierarchicalStreamWriter createWriter(Writer writer) {
        return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
    }
});

xstream.toXML(map);

, который становится

[["first", "value1"], ["second", "value2"]]

Я чувствую, что преобразование хеша java в хеш json должно быть прямым. Я что-то упустил?

Ответы [ 3 ]

1 голос
/ 29 августа 2012

Дело в том, что XStream в первую очередь предназначен для маршалирования и демаршализации Java-объектов в XML, а JSON является лишь запоздалой мыслью, и, безусловно, имеет наименее элегантную поддержку.

Техническая проблема заключается в том, что, поскольку XStream должен поддерживать оба формата - XML ​​и JSON, страдает представление карты JSON, поскольку нет собственного способа представления структур, подобных карте, в XML.

0 голосов
/ 03 января 2013

Вы можете попробовать использовать "официальный" json lib для java с json.org .

Призвание:

JSONObject jsobj = new JSONObject(map);
String strJson = jsobj.toString();
0 голосов
/ 31 июля 2012

У меня были похожие проблемы при конвертации в jSon. Мое решение этой проблемы состояло в том, чтобы иметь строку, уже отформатированную в JSon, перед тем как поместить ее в файл (в моем случае это база данных). Самый эффективный процесс, который я придумал до сих пор, заключался в создании функции toJson внутри моих классов для работы точно так же, как toString.

Пример:

Преобразует строку вывода данных объектов в формат Json

public JsonObject toJson()
   {

       JsonObject temp = new JsonObject();
       temp.addProperty(tagName,floatData);
       return temp;
    }

Так что для вас, внедрите аналогичный процесс при заполнении вашей карты.

...