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

2022-09-01 12:48:44

我一直在寻找与将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”,

如果有人能扩展我的理解,那将是一件非常高兴的事情。


答案 1

编辑:你需要你的java Data类是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

看看这个 将JSON转换为Java ,我想你可以定义一个类作为对象并传递它。因此,创建一些类并将其传递。

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

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

试试这样的东西。您可能需要进行一些实验。