Преобразование строки json в java-объект?
Я искал примеры, связанные с преобразованием строк JSON в объект Java, но не нашел хороших примеров. Тот, который я нашел, был действительно один раз и не имел дело со сложными строками JSON.
Я создаю приложение для перевода строк с английского на разные языки, используя google translate api. Ответ Google по запросу:... foolowing text отформатирован в JSON,
{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}}
Мой подход до сих пор использует API-интерфейс GSON, однако я фактически зацикливаюсь, как мне манипулировать этим сложным результатом и создать объект Java?
Мой класс java...
import com.google.gson.Gson;
public class JSONConverter {
private String traslatedText;
/**
* Create an object of it self by manipulating json string
* @param json type: String
* @return String Translated text result from JSON responce
*/
public String getTranslation(String json){
Gson gson = new Gson();
JSONConverter obj = gson.fromJson(json, JSONConverter.class);
return obj.getTranslationForReturn();
}
/**
* Method return a translation to a private call
* @return String translation
*/
private String getTranslationForReturn(){
return this.traslatedText;
}
}
Выше подхода не работает, так как я не получаю "Bonjour tout le monde" по возвращении,
было бы очень приятно, если кто-то сможет расширить мое понимание.
Ответы
Ответ 1
EDIT:
Вам нужен ваш Java-класс данных для точной модели JSON. Итак, ваш
{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}}
становится:
class DataWrapper {
public Data data;
public static DataWrapper fromJson(String s) {
return new Gson().fromJson(s, DataWrapper.class);
}
public String toString() {
return new Gson().toJson(this);
}
}
class Data {
public List<Translation> translations;
}
class Translation {
public String translatedText;
}
По мере усложнения объектной модели код стиля org.json поворачивается к нечитаемому, тогда как сопоставление объектов стиля gson/jackson по-прежнему остается простым Java-объектом.
Ответ 2
Мне обычно нравится использовать обычную org.json library
Используйте его как:
// make sure the quotes are escaped
String str = "{\"data\":{\"translations\":[{\"translatedText\":\"Bonjour tout le monde\"}]}}";
// the object data is inside a "global" JSONObject
data = new JSONObject(str).getJSONObject("data");
// get a JSONArray from inside an object
JSONArray translations = data.getJSONArray("translations");
// get the first JSONObject from the array
JSONObject text = translations.getJSONObject(0);
// get the String contained in the object -> logs Bonjour tout le monde
Log.d("***>Text", text.getString("translatedText"));
Возможно, так много кода менее понятно, чем хотелось бы. Это функция, как я бы это сделал:
public String getTranslation(String json){
JSONObject data = new JSONObject(json).getJSONObject("data");
return data.getJSONArray("translations").getJSONObject(0).getString("translatedText");
}
Ответ 3
проверьте это Преобразование JSON в Java, я думаю, вы можете определить класс как объект и передать это. Итак, создайте класс и пропустите его.
Data obj = gson.fromJson(json, Data.class);
class Data{
public List<Data> getTranslation(){
return translations;
}
}
Попробуйте что-нибудь подобное. Возможно, вам придется немного поэкспериментировать.