Gson:比较两个JSON字符串是否完全相等

RT,比较两个JSON字符串是否完全相等,这里使用google贡献的Gson。


一,no POJO,即不另外创建一个简单Java类

String str1 = "{\"properties\":{\"packet\":{\"recorded_at\":\"2015-09-02 04:45:45 +0000\",\"userId\":\"100000000000001\",\"meta\":{\"account\":\"xxx\",\"event\":\"track\"},\"fields\":{\"gyroData\":{\"rotation_y\":-1,\"rotation_z\":-1,\"rotation_x\":-1},\"accelerometerData\":{\"acceleration_x\":-1,\"acceleration_z\":-1,\"acceleration_y\":-1},\"location\":{\"speed\":4.68,\"speed_course\":0.7,\"horizontal_accuracy\":10,\"longtitude\":-122.02359082,\"vertical_accuracy\":-1,\"latitude\":37.33385024},\"pedometerData\":{\"step_count\":0}},\"recorded_sample_rate\":5}},\"geometry\":{\"type\":\"Point\",\"coordinates\":[37.33385024,-122.02359082]},\"type\":\"Feature\"}";
String str2 = "{\"properties\":{\"packet\":{\"recorded_at\":\"2015-09-02 04:45:45 +0000\",\"userId\":\"100000000000001\",\"meta\":{\"account\":\"xxx\",\"event\":\"track\"},\"fields\":{\"gyroData\":{\"rotation_y\":-1,\"rotation_z\":-1,\"rotation_x\":-1},\"accelerometerData\":{\"acceleration_x\":-1,\"acceleration_z\":-1,\"acceleration_y\":-1},\"location\":{\"speed\":4.68,\"speed_course\":0.7,\"horizontal_accuracy\":10,\"longtitude\":-122.02359082,\"vertical_accuracy\":-1,\"latitude\":37.33385024},\"pedometerData\":{\"step_count\":0}},\"recorded_sample_rate\":5}},\"geometry\":{\"type\":\"Point\",\"coordinates\":[37.33385024,-122.02359082]},\"type\":\"Feature\"}";
		


// method 1
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;


		JsonParser parser = new JsonParser();
		JsonObject obj = (JsonObject) parser.parse(str1);
		JsonParser parser1 = new JsonParser();
		JsonObject obj1 = (JsonObject) parser1.parse(str2);
		
		System.out.println(obj.equals(obj1));

//method 2

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;

Gson gson1 = new GsonBuilder().create();//or new Gson() 
		JsonElement e1 = gson1.toJsonTree(str1);//or new Gson() 
		
		Gson gson2 = new GsonBuilder().create();
		JsonElement e2 = gson2.toJsonTree(str2);
		System.out.println(e1.equals(e2));

//method 3

import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;

JsonElement e3 = new JsonPrimitive(str1);
		JsonElement e4 = new JsonPrimitive(str2);
		System.out.println(e3.equals(e4));


reference:

Gson: Directly convert String to JsonObject (no POJO)


二,使用简单POJO类,和mentor Yang讨论过这个问题,哪怕这个JSON字符串有多么复杂,一般情况下五层就达到上限了(上面那个Json String看起来那么”复杂“,才三层)。

这里只是举个简单的栗子。因为这种方法看起来比第一种方式麻烦多了。

步骤就是先建一个(或者多个)POJO类,类中的属性名和JSON字符串中的key名一一对应。

然后:

<span style="white-space:pre">		</span>Gson gson = new Gson();//new一个Gson对象
		//json字符串
		String json = "{\"name\":\"guolicheng\",\"id\":123456,\"date\":\"2013-4-13 12:36:54\"}";
		//new 一个Product对象
		Product product = new Product();
		//将一个json字符串转换为java对象
		<strong><span style="color:#ff0000;">product = gson.fromJson(json, Product.class);</span></strong>
		//输出
		System.out.println("Name:" + product.getName());
		System.out.println("Id:" + product.getId());
		System.out.println("Date:" + product.getDate());

reference:

使用Gson解析json


最后,提供一份可直接访问(不需要梯子)的Online Gson Doc:http://tool.oschina.net/apidocs/apidoc?api=gson2.2.2。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值