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

将json字符串转换为java对象?,java,android,json,api,gson,Java,Android,Json,Api,Gson,我一直在寻找将JSON字符串转换为Java对象的相关示例,但没有找到任何好的示例。我发现的一个是非常基本的一次,而不是真正处理复杂的JSON字符串 我正在制作一个应用程序,使用谷歌翻译api将字符串从英语翻译成不同的语言。谷歌对查询的回应是…愚弄的文本格式是JSON {"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}} 到目前为止,我的方法是使用GSON API,然而,我被如何操作这个复杂的结果并创建ja

我一直在寻找将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;
 }
}
上述方法不起作用,因为我没有得到《世界报》的回复

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

看看这个,我想你可以定义一个类作为对象并传递它。所以,创建一些类并传递它

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

类数据{
公共列表getTranslation(){
返回翻译;
}
}

试试这样的东西。你可能需要做一点实验。

我通常喜欢用普通的

将其用作:

 // 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");
}
编辑: 您需要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;
}
类数据包装器{
公共数据;
来自JSON的公共静态数据包装器(字符串s){
返回新的Gson().fromJson(s,DataWrapper.class);
}
公共字符串toString(){
返回新的Gson().toJson(this);
}
}
类数据{
公开名单翻译;
}
类翻译{
公共字符串翻译文本;
}

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

你得到的是一个json字符串,对吗?您还需要定义变量。然后你可以做一些类似于obj.translation的事情来获得实际的翻译。我以前从未在java中处理过json,所以我真的不知道如何定义该变量。请看您提供的链接中的示例2。虽然你的字符串是嵌套的,但我真的不知道gson会如何解析它。这个问题看起来像是重复的:很高兴知道一个简单的新方法!感谢这是一所非常古老的学校,现实世界中再也没有人使用这个图书馆了。很有趣,它被标记为正确答案。@Kevin对于这么简单的任务,我仍然认为它是最好的方法。只要两次LOC,你就能得到结果。您必须定义3个类才能使用Gson获得相同的结果。我不会否认它在其他情况下的优势,但我在这里看不到任何优势。\n这是真的,Aleadam,但是当你确实需要这些额外的东西时会发生什么呢。此外,它使它更干净,更容易阅读,以及更新。Java是关于OO编程的,不是吗?我在整个应用程序中都使用相同的东西。我们的观点是什么JSON解析或对象建模谢谢你的回答,但是我选择第二个答案更容易接受。你的答案让我对Gson的理解更清楚了。。。cheers@krio,没关系,但我同意凯文的回答。gson看起来更具最新性和健壮性。如果参数为带下划线的“translated_text”,且内部类为iis“translatedText”,则此变量的结果为空。我已经解决了这个问题:当json字段与pojo字段名不匹配时,会出现Gson注释。是的@序列化名称(“json_字段”)是一种方式。
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;
}