Gson——使用详解(2)

本文介绍如何使用Gson库将JSON对象转换为Java对象。通过示例展示了基本JSON对象及嵌套JSON对象的处理方法。

转自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;
	    @Override
	    public 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 - 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

public class Person {
 
    private String NAME;
    private String LOCATION;
    private Exam EXAM;
 
    @Override
    public 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使它更便于使用,即使在这里没有讨论的部分,它也提供了强大的灵活性。




基于粒子群优化算法的p-Hub选址优化(Matlab代码实现)内容概要:本文介绍了基于粒子群优化算法(PSO)的p-Hub选址优化问题的研究与实现,重点利用Matlab进行算法编程和仿真。p-Hub选址是物流与交通网络中的关键问题,旨在通过确定最优的枢纽节点位置和非枢纽节点的分配方式,最小化网络总成本。文章详细阐述了粒子群算法的基本原理及其在解决组合优化问题中的适应性改进,结合p-Hub中转网络的特点构建数学模型,并通过Matlab代码实现算法流程,包括初始化、适应度计算、粒子更新与收敛判断等环节。同时可能涉及对算法参数设置、收敛性能及不同规模案例的仿真结果分析,以验证方法的有效性和鲁棒性。; 适合人群:具备一定Matlab编程基础和优化算法理论知识的高校研究生、科研人员及从事物流网络规划、交通系统设计等相关领域的工程技术人员。; 使用场景及目标:①解决物流、航空、通信等网络中的枢纽选址与路径优化问题;②学习并掌握粒子群算法在复杂组合优化问题中的建模与实现方法;③为相关科研项目或实际工程应用提供算法支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐段理解算法实现逻辑,重点关注目标函数建模、粒子编码方式及约束处理策略,并尝试调整参数或拓展模型以加深对算法性能的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值