问题
我想解析来自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;