Преобразование строки JSON в объект Java? - PullRequest
21 голосов
/ 21 мая 2011

Я искал примеры, связанные с преобразованием строк JSON в объект Java, но не нашел хороших примеров.Тот, который я нашел, был действительно простым и не имел дела со сложными строками JSON.

Я делаю приложение для перевода строк с английского на разные языки, используя Google Translate API.Ответ Google на запрос: ... следующий текст отформатирован в JSON,

{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}} 

Мой подход до сих пор заключается в использовании GSON API, однако я застрял на самом деле, как я должен манипулировать этим сложным результатом и создавать Javaobject?

Мой 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" по возвращении,

itбыло бы очень приятно, если бы кто-то мог расширить мое понимание.

Ответы [ 3 ]

23 голосов
/ 21 мая 2011

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.

11 голосов
/ 21 мая 2011

Мне обычно нравится использовать простую библиотеку org.json

Используйте ее как:

 // 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");
}
9 голосов
/ 21 мая 2011

проверьте это Преобразование JSON в Java , я думаю, вы можете определить класс как объект и передать его вместе. Итак, создайте некоторый класс и передайте его.

Data obj = gson.fromJson(json, Data.class);

class Data{
  public List<Data> getTranslation(){
     return translations;
  }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...