Вопрос-ответ

Convert JSON to Map

Преобразование 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));

}
java json collections