将json字符串转换为java对象?

Tea*_*App 24 java api android json gson

我一直在寻找与将JSON字符串转换为Java对象相关的示例,但没有找到任何好的示例.我找到的那个是非常基本的,并没有真正处理复杂的JSON字符串.

我正在制作一个应用程序,使用谷歌翻译api将字符串从英语翻译成不同的语言.谷歌对查询的回应是......愚弄文本格式为JSON,

{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}} 
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的方法是使用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;
 }
}
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用,因为我没有得到"Bonjour tout le monde"返回,

如果有人能够扩展我的理解,那将是一件非常愉快的事情.

Kev*_*vin 28

编辑:您需要您的Java数据类是JSON的精确模型.所以你的

{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}} 
Run Code Online (Sandbox Code Playgroud)

变为:

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;
}
Run Code Online (Sandbox Code Playgroud)

随着对象模型变得越来越复杂,org.json样式代码转向不可读,而gson/jackson样式对象映射仍然只是普通的java对象.


Ale*_*dam 11

我通常喜欢使用普通的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"));
Run Code Online (Sandbox Code Playgroud)

也许这么多代码不如我所希望的那样清晰.这是我会这样做的功能:

public String getTranslation(String json){  
  JSONObject data = new JSONObject(json).getJSONObject("data");
  return data.getJSONArray("translations").getJSONObject(0).getString("translatedText");
}
Run Code Online (Sandbox Code Playgroud)

  • @Kevin为了这么简单的任务,我仍然觉得这是最好的方法.只需2个LOC即可获得结果.您必须定义3个类才能获得与Gson相同的结果.我不会否认其在其他情况下的优势,但我在这里看不到任何优点. (3认同)

Mat*_*att 10

检查这个将JSON转换为Java,我猜你可以定义一个类作为对象并传递它.所以,创建一些类并传递它.

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

class Data{
  public List<Data> getTranslation(){
     return translations;
  }
}
Run Code Online (Sandbox Code Playgroud)

尝试类似的东西.您可能需要进行一些实验.