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

标签 java android json api gson

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

我正在制作一个应用程序,使用谷歌翻译 api 将字符串从英语翻译成不同的语言。 Google 对查询的响应是...以下文本采用 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 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 对象。

关于java - 将json字符串转换为java对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6079505/

相关文章:

java - 在android中后台访问麦克风

java - 如何使用 Spring Data REST 进行高级搜索?

java - Android(Java) 从 Netty Nio 服务器读取时套接字读取挂起

jquery - DataTables自定义下拉日期过滤器

javascript - 根据特定属性对 JSON 进行排序/过滤

java - 在 reduce 操作中使用 StringBuilder(...) 作为标识值会产生不可预测的结果

android - 通过 PhoneGap Build 从 Android 4.x 应用程序的图像映射区域中删除突出显示

java - ArrayList 作为全局变量

javascript - 来自 dom 的 Json 不起作用

java - TableRow 在 TableLayout 中返回空值?