我想使用GSON在JAVA中解析这个JSON文件:
{
"descriptor" : {
"app1" : {
"name" : "mehdi",
"age" : 21,
"messages": ["msg 1","msg 2","msg 3"]
},
"app2" : {
"name" : "mkyong",
"age" : 29,
"messages": ["msg 11","msg 22","msg 33"]
},
"app3" : {
"name" : "amine",
"age" : 23,
"messages": ["msg 111","msg 222","msg 333"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何加入根元素,即:描述符,然后是app3元素,最后是name元素.
我遵循了本教程http://www.mkyong.com/java/gson-streaming-to-read-and-write-json/,但它没有显示具有root和childs元素的情况.
Mik*_*ikO 51
Imo,使用GSON解析JSON响应的最佳方法是创建"匹配"您的响应然后使用Gson.fromJson()方法的类.
例如:
class Response {
Map<String, App> descriptor;
// standard getters & setters...
}
class App {
String name;
int age;
String[] messages;
// standard getters & setters...
}
Run Code Online (Sandbox Code Playgroud)
然后使用:
Gson gson = new Gson();
Response response = gson.fromJson(yourJson, Response.class);
Run Code Online (Sandbox Code Playgroud)
哪里yourJson可以是a String,any Reader,a JsonReader或a JsonElement.
最后,如果您想访问任何特定字段,您只需要:
String name = response.getDescriptor().get("app3").getName();
Run Code Online (Sandbox Code Playgroud)
您可以按照其他答案中的建议手动解析JSON,但我个人认为这种方法在更长时间内更清晰,更易于维护,并且更符合JSON的整体理念.
Ger*_*ere 20
我正在使用gson 2.2.3
public class Main {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
JsonReader jsonReader = new JsonReader(new FileReader("jsonFile.json"));
jsonReader.beginObject();
while (jsonReader.hasNext()) {
String name = jsonReader.nextName();
if (name.equals("descriptor")) {
readApp(jsonReader);
}
}
jsonReader.endObject();
jsonReader.close();
}
public static void readApp(JsonReader jsonReader) throws IOException{
jsonReader.beginObject();
while (jsonReader.hasNext()) {
String name = jsonReader.nextName();
System.out.println(name);
if (name.contains("app")){
jsonReader.beginObject();
while (jsonReader.hasNext()) {
String n = jsonReader.nextName();
if (n.equals("name")){
System.out.println(jsonReader.nextString());
}
if (n.equals("age")){
System.out.println(jsonReader.nextInt());
}
if (n.equals("messages")){
jsonReader.beginArray();
while (jsonReader.hasNext()) {
System.out.println(jsonReader.nextString());
}
jsonReader.endArray();
}
}
jsonReader.endObject();
}
}
jsonReader.endObject();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100953 次 |
| 最近记录: |