问题

我想解析来自JSON的数据,类型为String。我正在使用Google Gson

我有:

jsonLine = "
{
 "data": {
  "translations": [
   {
    "translatedText": "Hello world"
   }
  ]
 }
}
";

我的班级是:

public class JsonParsing{

   public void parse(String jsonLine) {

      // there I would like to get String "Hello world"

   }

}

#1 热门回答(203 赞)

这是一个简单的代码,我避免了所有的检查,但这是主要的想法。

public String parse(String jsonLine) {
    JsonElement jelement = new JsonParser().parse(jsonLine);
    JsonObject  jobject = jelement.getAsJsonObject();
    jobject = jobject.getAsJsonObject("data");
    JsonArray jarray = jobject.getAsJsonArray("translations");
    jobject = jarray.get(0).getAsJsonObject();
    String result = jobject.get("translatedText").getAsString();
    return result;
}

为了使用更通用 - 你会发现Gson's javadocs非常清楚和有用。


#2 热门回答(87 赞)

在我的第一个gson应用程序中,我避免使用其他类来捕获值,主要是因为我使用json来配置事务

尽管缺乏信息(甚至是gson页面),这就是我发现和使用的内容:

从...开始

Map jsonJavaRootObject = new Gson().fromJson("{/*whatever your mega complex object*/}", Map.class)

每次gson看到{},它都会创建一个Map(实际上是一个gson StringMap)

每次gson看到''时,它都会创建一个String

每次gson看到一个数字,它就会创建一个Double

每次gson看到[]时,它都会创建一个ArrayList

你可以将这些事实(合并)用于你的优势

最后,这是制作该东西的代码

Map<String, Object> javaRootMapObject = new Gson().fromJson(jsonLine, Map.class);

    System.out.println(
        (
            (Map)
            (
                (List)
                (
                    (Map)
                    (
                        javaRootMapObject.get("data")
                    )
                 ).get("translations")
            ).get(0)
        ).get("translatedText")
    );

#3 热门回答(16 赞)

最简单的事情通常是创建匹配的Object层次结构,如下所示:

public class Wrapper {
   public Data data;
}
static class Data {
   public Translation[] translations;
}
static class Translation {
   public String translatedText;
}

然后使用GSON绑定,通过字段遍历对象层次结构。添加getter和setter对于基本数据容器毫无意义。

所以类似于:

Wrapper value = GSON.fromJSON(jsonString, Wrapper.class);
String text = value.data.translations[0].translatedText;

原文链接