我想解析来自JSON类型的数据String
.我正在使用Google Gson.
我有:
jsonLine = "
{
"data": {
"translations": [
{
"translatedText": "Hello world"
}
]
}
}
";
Run Code Online (Sandbox Code Playgroud)
我的班级是:
public class JsonParsing{
public void parse(String jsonLine) {
// there I would like to get String "Hello world"
}
}
Run Code Online (Sandbox Code Playgroud)
MBy*_*ByD 227
这是一个简单的代码,我避免了所有的检查,但这是主要的想法.
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;
}
Run Code Online (Sandbox Code Playgroud)
为了使用更通用 - 您会发现Gson的javadoc非常清晰且有用.
Jor*_*hez 106
在我的第一个gson应用程序中,我避免使用其他类来捕获值,主要是因为我使用json来配置事务
尽管缺乏信息(甚至是gson页面),这就是我发现和使用的:
从...开始
Map jsonJavaRootObject = new Gson().fromJson("{/*whatever your mega complex object*/}", Map.class)
Run Code Online (Sandbox Code Playgroud)
每次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")
);
Run Code Online (Sandbox Code Playgroud)
Sta*_*Man 19
最简单的事情通常是创建匹配的Object层次结构,如下所示:
public class Wrapper {
public Data data;
}
static class Data {
public Translation[] translations;
}
static class Translation {
public String translatedText;
}
Run Code Online (Sandbox Code Playgroud)
然后使用GSON绑定,通过字段遍历对象层次结构.添加getter和setter对于基本数据容器毫无意义.
所以类似于:
Wrapper value = GSON.fromJSON(jsonString, Wrapper.class);
String text = value.data.translations[0].translatedText;
Run Code Online (Sandbox Code Playgroud)
Har*_*eet 14
您可以为json对象创建相应的java类.整数,字符串值可以按原样映射.Json可以这样解析 -
Gson gson = new GsonBuilder().create();
Response r = gson.fromJson(jsonString, Response.class);
Run Code Online (Sandbox Code Playgroud)
这是一个例子 - http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html
一种方法是创建一个 JsonObject 并遍历参数。例如
JsonObject jobj = new Gson().fromJson(jsonString, JsonObject.class);
Run Code Online (Sandbox Code Playgroud)
然后你可以提取 bean 值,如:
String fieldValue = jobj.get(fieldName).getAsString();
boolean fieldValue = jobj.get(fieldName).getAsBoolean();
int fieldValue = jobj.get(fieldName).getAsInt();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
您可以使用单独的类来表示JSON对象,并使用@SerializedName
注释指定要为每个数据成员抓取的字段名称:
public class Response {
@SerializedName("data")
private Data data;
private static class Data {
@SerializedName("translations")
public Translation[] translations;
}
private static class Translation {
@SerializedName("translatedText")
public String translatedText;
}
public String getTranslatedText() {
return data.translations[0].translatedText;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用一个Gson
对象在你的parse()方法中进行解析:
Gson gson = new Gson();
Response response = gson.fromJson(jsonLine, Response.class);
System.out.println("Translated text: " + response.getTranslatedText());
Run Code Online (Sandbox Code Playgroud)
使用这种方法,您可以重用Response
该类来添加任何其他附加字段,以获取您可能希望从JSON中提取的其他数据成员 - 如果您想要进行更改以获取结果,例如,在一次调用中进行多次翻译,或获取检测到的源语言的附加字符串.
使用Gson解决
我将在json String中为单个参数创建一个类.或者,您可以创建一个名为"Data"的主类,然后类似地创建内部类.为清晰起见,我创建了单独的类
课程如下.
在类JsonParsing中,方法"解析"我们调用gson.fromJson(jsonLine, Data.class)
哪个将使用Reflection转换java对象中的String.
一旦我们可以访问"Data"对象,我们就可以单独访问每个参数.
没有机会测试这段代码,因为我离开了我的开发机器.但这应该有所帮助.
一些很好的例子和文章.
http://albertattard.blogspot.com/2009/06/practical-example-of-gson.html
http://sites.google.com/site/gson/gson-user-guide
码
public class JsonParsing{
public void parse(String jsonLine) {
Gson gson = new GsonBuilder().create();
Data data = gson.fromJson(jsonLine, Data.class);
Translations translations = data.getTranslation();
TranslatedText[] arrayTranslatedText = translations.getArrayTranslatedText(); //this returns an array, based on json string
for(TranslatedText translatedText:arrayTranslatedText )
{
System.out.println(translatedText.getArrayTranslatedText());
}
}
}
public class Data{
private Translations translations;
public Translations getTranslation()
{
return translations;
}
public void setTranslation(Translations translations)
{
this.translations = translations;
}
}
public class Translations
{
private TranslatedText[] translatedText;
public TranslatedText[] getArrayTranslatedText()
{
return translatedText;
}
public void setTranslatedText(TranslatedText[] translatedText)
{
this.translatedText= translatedText;
}
}
public class TranslatedText
{
private String translatedText;
public String getTranslatedText()
{
return translatedText;
}
public void setTranslatedText(String translatedText)
{
this.translatedText = translatedText;
}
}
Run Code Online (Sandbox Code Playgroud)
JsonParser parser = new JsonParser();
JsonObject jo = (JsonObject) parser.parse(data);
JsonElement je = jo.get("some_array");
//Parsing back the string as Array
JsonArray ja = (JsonArray) parser.parse(o.get("some_array").getAsString());
for (JsonElement jo : ja) {
JsonObject j = (JsonObject) jo;
// Your Code, Access json elements as j.get("some_element")
}
Run Code Online (Sandbox Code Playgroud)
一个简单的例子来解析这样的 JSON
{ "some_array" : "[\"some_element\":1,\"some_more_element\":2]" , "some_other_element" : 3 }
归档时间: |
|
查看次数: |
320935 次 |
最近记录: |