您的位置:首页 > 其它

Gson——使用详解(2)

2016-09-06 14:28 148 查看

转自http://www.importnew.com/16630.html

使用JSON对象

比方说,我们需要使用JSON对象并加载他们为Java对象。假设web服务器查询时产生如下JSON对象:{NAME:"Albert Attard",P_LANGUAGE:"Java",LOCATION:"Malta"}此JSON对象包含3个不同值的域。比如我们需要使用JSON对象并创建一个Java对象来展示它。为了使这个例子更有趣,假设我们只关心name和location域首先创建一个Java类来表示name和location。类命名为Person。类的名字无关紧要,但域的名字必须一致。域名必须匹配(大小写敏感)JSON对象中的名字。更进一步,类必须包含一个默认构造函数(即使它被设置为private)。如下所示,name和location域在JSON中是大写的。JSON中域P_LANGUAGE被忽略了,因为Java对象中不包括该名称的域public class Person {private String NAME;private String LOCATION;@Overridepublic String toString() {return NAME + " - " + LOCATION;}}准备好Java对象后,我们可以读取JSON对象并加载为Java对象,如下代码所示。为了模拟真实情况,我们使用了字节流作为输入。还要注意,JSON内容保存在resource文件夹的文件里(这不是常规做法)。public static void main(String[] args) throws IOException {Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("js/Server1.json"), "UTF-8");Gson gson = new GsonBuilder().create();Person p = gson.fromJson(reader, Person.class);System.out.println(p);}输出如下:Albert Attard - MaltaGson解析JSON对象并创建了一个Person类的实例,并打印到命令行中。

嵌套JSON对象

让我们对上面的例子更进一步,以下所示JSON代码段包含了一个嵌套对象。{NAME:"Albert Attard",P_LANGUAGE:"Java",LOCATION:"Malta",EXAM: {SUBJECT:"Programming",GRADE:4.5}}EXAM域由两个域组成,分别是
SUBJECT和
GRADE。我们需要修改Person类的定义来包含EXAM域,并创建一个新的Java类来表示EXAM,该类包含SUBJECT和GRADE域。
我们首先创建新的类来表示嵌套对象。就像之前讨论那样,类名无关紧要,但是域名必须与JSON中的域名匹配。
package com.javacreed.examples.gson.part3;public class Exam {private String SUBJECT;private double GRADE;// Getters and setters are not required for this example.// GSON sets the fields directly using reflection.@Overridepublic String toString() {return SUBJECT + " - " + GRADE;}}现在我们可以修改Person类,引入一个与JSON中EXAM同名的域,类型为Exam
public class Person {private String NAME;private String LOCATION;private Exam EXAM;@Overridepublic String toString() {return NAME + " - " + LOCATION + " (" + EXAM + ")";}}注意,所需的变化是最小的,因为Gson动态发现(使用反射)类和它的域。最后,让我们尝试新的变化。
public class JsonToJava {public static void main(String[] args) throws IOException {Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("js/Server2.json"), "UTF-8");Gson gson = new GsonBuilder().create();Person p = gson.fromJson(reader, Person.class);System.out.println(p);}}sonToJava类没有做任何改变,因为Gson使用了模型(Person和Exam类)将Json映射成Java。

结论

即使JSON可能是一个新概念,但它十分简单与直接。此外,相比于需要增加标签进行消息/数据转换而不断膨胀的笨重的XML,它因为简单更加流行。需要指出JSON是JavaScript的一个子集,JavaScript将它作为一个完美的方案来进行数据交换,例如网页。GSON API使它更便于使用,即使在这里没有讨论的部分,它也提供了强大的灵活性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: