簡體   English   中英

將json字符串轉換為java對象?

[英]Converting json string to java object?

我一直在尋找與將JSON字符串轉換為Java對象相關的示例,但沒有找到任何好的示例。 我找到的那個是非常基本的,並沒有真正處理復雜的JSON字符串。

我正在制作一個應用程序,使用谷歌翻譯api將字符串從英語翻譯成不同的語言。 谷歌對查詢的回應是......愚弄文本格式為JSON,

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

到目前為止,我的方法是使用GSON API,但實際上我不知道如何操作這個復雜的結果並創建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”返回,

如果有人能夠擴展我的理解,那將是一件非常愉快的事情。

編輯:您需要您的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對象。

我通常喜歡使用普通的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");
}

檢查這個將JSON轉換為Java ,我想你可以將一個類定義為對象並傳遞它。 所以,創建一些類並傳遞它。

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

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

嘗試類似的東西。 您可能需要進行一些實驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM