Преобразование JSON в карту
Каков наилучший способ преобразовать JSON-код следующим образом:
{ "data" : { "field1" : "value1", "field2" : "value2" }}
в карте Java, в которой ключами являются (field1, field2), а значениями для этих полей являются (value1, value2).
Есть идеи? Должен ли я использовать Json-lib для этого? Или лучше, если я напишу свой собственный синтаксический анализатор?
Переведено автоматически
Ответ 1
Я надеюсь, вы пошутили насчет написания собственного синтаксического анализатора. :-)
Для такого простого отображения подойдет большинство инструментов из http://json.org (раздел java). Для одного из них (Jackson https://github.com/FasterXML/jackson-databind/#5-minute-tutorial-streaming-parser-generator) вы бы сделали:
Map<String,Object> result = new ObjectMapper().readValue(JSON_SOURCE, HashMap.class);
(где JSON_SOURCE - это файл, входной поток, средство чтения или строка содержимого json)
Ответ 2
Использование библиотеки GSON:
import com.google.gson.Gson;import com.google.common.reflect.TypeToken;import java.lang.reclect.Type;
Используйте следующий код:
Type mapType = new TypeToken<Map<String, Map>>(){}.getType(); Map<String, String[]> son = new Gson().fromJson(easyString, mapType);
Ответ 3
Мне нравится библиотека Google gson. Если вы не знаете структуру json. Вы можете использовать
JsonElement root = new JsonParser().parse(jsonString);
и тогда вы сможете работать с json. например, как получить "value1" из вашего gson:
String value1 = root.getAsJsonObject().get("data").getAsJsonObject().get("field1").getAsString();
Ответ 4
Используйте JSON lib, например. http://www.json.org/java /
// Assume you have a Map<String, String> in JSONObject jdata@SuppressWarnings("unchecked")Iterator<String> nameItr = jdata.keys();Map<String, String> outMap = new HashMap<String, String>();while(nameItr.hasNext()) { String name = nameItr.next(); outMap.put(name, jdata.getString(name));}