Преобразование строки 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;
  }
}

Попробуйте что-нибудь подобное. Возможно, вам придется немного поэкспериментировать.