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

JSON parsing using Gson for Java

Синтаксический анализ JSON с использованием Gson для Java

Я хотел бы проанализировать данные из JSON типа String. Я использую Google Gson.

У меня есть:

jsonLine = "
{
"
data": {
"
translations": [
{
"
translatedText": "Hello world"
}
]
}
}
"
;

и мой класс:

public class JsonParsing{

public void parse(String jsonLine) {

// there I would like to get String "Hello world"

}

}
Переведено автоматически
Ответ 1

Это простой код для этого, я избежал всех проверок, но это основная идея.

 public String parse(String jsonLine) {
JsonElement jelement = new JsonParser().parse(jsonLine);
JsonObject jobject = jelement.getAsJsonObject();
jobject = jobject.getAsJsonObject("data");
JsonArray jarray = jobject.getAsJsonArray("translations");
jobject = jarray.get(0).getAsJsonObject();
String result = jobject.get("translatedText").getAsString();
return result;
}

Чтобы сделать использование более универсальным, вы обнаружите, что javadocs от Gson довольно понятны и полезны.

Ответ 2

В моем первом приложении gson я избегал использования дополнительных классов для сбора значений в основном потому, что использую json для настройки

несмотря на отсутствие информации (даже страницы gson), это то, что я нашел и использовал:

начиная с

Map jsonJavaRootObject = new Gson().fromJson("{/*whatever your mega complex object*/}", Map.class)

Каждый раз, когда gson видит {} , он создает карту (фактически gson StringMap )

Каждый раз, когда gson видит " " , он создает строку

Каждый раз, когда gson видит число, он создает Double

Каждый раз, когда gson видит [] , он создает ArrayList

Вы можете использовать эти факты (вместе взятые) в своих интересах

Наконец, это код, который делает эту вещь

        Map<String, Object> javaRootMapObject = new Gson().fromJson(jsonLine, Map.class);

System.out.println(
(
(Map)
(
(List)
(
(Map)
(
javaRootMapObject.get("data")
)
).get("translations")
).get(0)
).get("translatedText")
);
Ответ 3

Обычно проще всего создать соответствующую иерархию объектов, например:

public class Wrapper {
public Data data;

static class Data {
public Translation[] translations;
}
static class Translation {
public String translatedText;
}
}

а затем привязка с использованием GSON, прохождение иерархии объектов по полям. Добавление геттеров и сеттеров бессмысленно для базовых контейнеров данных.

Итак, что-то вроде:

Wrapper value = GSON.fromJSON(jsonString, Wrapper.class);
String text = value.data.translations[0].translatedText;
Ответ 4

Вы можете создать соответствующие классы java для объектов json. Целочисленные, строковые значения могут быть отображены как есть. Json может быть проанализирован следующим образом-

Gson gson = new GsonBuilder().create(); 
Response r = gson.fromJson(jsonString, Response.class);

Вот пример- http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html

java json