JSON

完全理解Gson(1):简单入门(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-07 17:01 我要评论( )

准备好Java对象后,我们可以读取JSON对象并加载为Java对象,如下代码所示。为了模拟真实情况,我们使用了字节流作为输入。还要注意,JSON内容保存在resource文件夹的文件里(这不是常规做法)。 package com.javacree

准备好Java对象后,我们可以读取JSON对象并加载为Java对象,如下代码所示。为了模拟真实情况,我们使用了字节流作为输入。还要注意,JSON内容保存在resource文件夹的文件里(这不是常规做法)。

package com.javacreed.examples.gson.part2; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class JsonToJava { public static void main(String[] args) throws IOException { try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("/Server1.json"), "UTF-8")){ Gson gson = new GsonBuilder().create(); Person p = gson.fromJson(reader, Person.class); System.out.println(p); } } }

输出如下:

Albert Attard - Malta

Gson解析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. @Override public String toString() { return SUBJECT + " - " + GRADE; } }

现在我们可以修改Person类,引入一个与JSON中EXAM同名的域,类型为Exam。注意,下面的Person类与前一个<span style=”color: #ff0000;”>位于</span>不同的包。

package com.javacreed.examples.gson.part3; public class Person { private String NAME; private String LOCATION; private Exam EXAM; @Override public String toString() { return NAME + " - " + LOCATION + " (" + EXAM + ")"; } }

注意,所需的变化是最小的,因为Gson动态发现(使用反射)类和它的域。本文不包含反射,对于更多关于反射的信息,请参考:Reflection in Action.

最后,让我们尝试新的变化。

package com.javacreed.examples.gson.part3; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class JsonToJava { public static void main(String[] args) throws IOException { try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("/Server2.json"), "UTF-8")){ Gson gson = new GsonBuilder().create(); Person p = gson.fromJson(reader, Person.class); System.out.println(p); } } }

JsonToJava类没有做任何改变,因为Gson使用了模型(Person和Exam类)将Json映射成Java。

结论

即使JSON可能是一个新概念,但它十分简单与直接。此外,相比于需要增加标签进行消息/数据转换而不断膨胀的笨重的XML,它因为简单更加流行。需要指出JSON是JavaScript的一个子集,JavaScript将它作为一个完美的方案来进行数据交换,例如网页。GSON API使它更便于使用,即使在这里没有讨论的部分,它也提供了强大的灵活性。

欲了解更多GSON的例子,请移步第2部分,我们会探索更复杂的例子,并讨论如何使用GSON解串器来完全控制反序列化过程。

相关文章

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Android中gson、jsonobject解析JSON的方法详解

    Android中gson、jsonobject解析JSON的方法详解

    2017-03-07 17:02

  • json解析性能比较(gson与jackson) (zz)

    json解析性能比较(gson与jackson) (zz)

    2017-03-05 10:08

  • 比Gson解析速度快10倍!——Json解析神器Jackson使用介绍

    比Gson解析速度快10倍!——Json解析神器Jackson使用介绍

    2017-03-03 11:01

  • com.google.gson json字符串的序列化与反序列化

    com.google.gson json字符串的序列化与反序列化

    2017-01-29 09:00

网友点评
<