`
jiuyuehe
  • 浏览: 183907 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

5分钟 玩转google Gson

阅读更多

google gson 是一个非常轻量的java 对象与json相互转化工具。

入门也非常简单,下面来看几种常用的方法

public class Pet{
	
	
	private String ma;
	
	private String ses;
	
	private String add;
	
	private String oct;
	
	
	private List<Integer> managers = new ArrayList<Integer>();

       //get set

	}

以此pet类作为例子

Gson g = new Gson();
		String json = g.toJson(p);
		Pet pt= g.fromJson(json, Pet.class);

1   隐藏某个字段 

当然还有特殊要求,必须pet 转化json 所有字段都转化了,现在是隐藏某个字段,很简单,只需使用annotation @Expos 暴露出来就行,需要的加上,不需要的不加

	@Expose
	private String ma;
	@Expose()
	private String ses;
	@Expose()
	private String add;
	
	private String oct;

 这是gson 就应该这么new 

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
		System.out.println(gson.toJson(p));
		System.out.println(gson.toJson(oList));

 2 换属性名字

 public class SomeClassWithFields {
   @SerializedName("name") private final String someField;
   private final String someOtherField;

   public SomeClassWithFields(String a, String b) {
     this.someField = a;
     this.someOtherField = b;
   }
 }
 
//The following shows the output that is generated when serializing an instance of the above example class:

 SomeClassWithFields objectToSerialize = new SomeClassWithFields("a", "b");
 Gson gson = new Gson();
 String jsonRepresentation = gson.toJson(objectToSerialize);
 System.out.println(jsonRepresentation);

 ===== OUTPUT =====
 {"name":"a","someOtherField":"b"}

 

3 加版本号

 public class User {
   private String firstName;
   private String lastName;
   @Since(1.0) private String emailAddress;
   @Since(1.0) private String password;
   @Since(1.1) private Address address;
 }

 4 InputStream 转 json

 

 public List<Message> readJsonStream(InputStream in) throws IOException {
     JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
     try {
       return readMessagesArray(reader);
     } finally {
       reader.close();
     }
   }

   public List<Message> readMessagesArray(JsonReader reader) throws IOException {
     List<Message> messages = new ArrayList<Message>();

     reader.beginArray();
     while (reader.hasNext()) {
       messages.add(readMessage(reader));
     }
     reader.endArray();
     return messages;
   }

   public Message readMessage(JsonReader reader) throws IOException {
     long id = -1;
     String text = null;
     User user = null;
     List<Double> geo = null;

     reader.beginObject();
     while (reader.hasNext()) {
       String name = reader.nextName();
       if (name.equals("id")) {
         id = reader.nextLong();
       } else if (name.equals("text")) {
         text = reader.nextString();
       } else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {
         geo = readDoublesArray(reader);
       } else if (name.equals("user")) {
         user = readUser(reader);
       } else {
         reader.skipValue();
       }
     }
     reader.endObject();
     return new Message(id, text, user, geo);
   }

   public List<Double> readDoublesArray(JsonReader reader) throws IOException {
     List<Double> doubles = new ArrayList<Double>();

     reader.beginArray();
     while (reader.hasNext()) {
       doubles.add(reader.nextDouble());
     }
     reader.endArray();
     return doubles;
   }

   public User readUser(JsonReader reader) throws IOException {
     String username = null;
     int followersCount = -1;

     reader.beginObject();
     while (reader.hasNext()) {
       String name = reader.nextName();
       if (name.equals("name")) {
         username = reader.nextString();
       } else if (name.equals("followers_count")) {
         followersCount = reader.nextInt();
       } else {
         reader.skipValue();
       }
     }
     reader.endObject();
     return new User(username, followersCount);
   }

 更多功能请访问http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html 上面代码例子也有的是来自api,api非常详细。

对ztree 里面复杂的json 格式转化非常简单。

 

补充:使用的hibernate的项目 中经常会出现级联对象中,外键对象无法转化出来,或转出来后为null 的现像。例如:

 */
	@RequestMapping(value = "/getTopicByBroad/{broadId}/{pageIndex}/{pageSize}" , produces = "text/plain;charset=UTF-8")
	@ResponseBody
	public String getTopicByBroad(@PathVariable int broadId,@PathVariable int pageIndex,@PathVariable int pageSize) {
	
		Page<Topic>  topics = topicService.getTopicByBroad(pageIndex, pageSize, broadId);
		
		List<Topic> ts = topics.getResult();
		//此for循环中,对象是有值的,
		for (Topic topic : ts) {
			Broad b = topic.getBroad();
			System.out.println(b.getBroadName());
		}
		
		Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
		String json = gson.toJson(topics.getResult().get(0).getBroad());
		System.out.println(json);//broad:{},user:{}无值
		return json;
	}

 其实原因很简单,因为hibernate 默认配置了懒加载,

@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "user_id")
	public TtUser getTtUser() {
		return this.ttUser;
	}

	public void setTtUser(TtUser ttUser) {
		this.ttUser = ttUser;
	}
//改成eager
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "broad_id")
	public Broad getBroad() {
		return this.broad;
	}
改成饥饿就行了

 

 

     

4
3
分享到:
评论

相关推荐

    googleGson JsonObject json转换包

    包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class ...

    Google gson jar包

    描述中提到的“用于复杂的Json转换 例 Json 转 List”展示了Gson的一个核心应用场景。Gson允许开发者将JSON对象直接转换为Java对象,反之亦然。这里的"Bean"代表Java中的POJO(Plain Old Java Object),也就是一个...

    谷歌 Gson2.8.0 依赖包、文档和源码

    谷歌Gson库是Java开发中广泛使用的JSON解析和序列化工具,版本2.8.0是其一个稳定且功能丰富的版本。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。...

    om.google.gson.Gson Gson maven依赖

    Gson是Google开发的一款Java语言编写的库,用于在Java对象和JSON数据之间进行映射。这个库使得Java对象可以轻松地序列化成JSON格式,同时也可以从JSON字符串反序列化回Java对象。在Java开发中,Gson库非常常见,特别...

    利用Google Gson实现JSON字符串和对象之间相互转换

    Google Gson库提供了一个强大的工具,使得Java对象与JSON字符串之间的转换变得简单易行。本文将详细介绍如何利用Google Gson库进行JSON字符串与对象之间的相互转换。 首先,我们需要了解Gson的核心概念。Gson库通过...

    com.google.gson.Gson 2.8.1 2.8.2 jar包 gson

    Gson是Google开发的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。它的全称是Google Gson,主要用于将Java对象转换为JSON格式的字符串,也可以将JSON字符串反序列化为对应的Java对象。在Java开发中,...

    com.google.gson.Gson.jar

    json我们在网络请求中经常用到,最近最火的微信小程序开发中... 就会报错,因为对于嵌套类型的json它是解释不出来的,这时就需要用到com.google.gson.Gson.jar了。资源中提供了jar包与代码示例,一句代码解决您的问题。

    google Gson

    谷歌的Gson库是Java和Android开发者用于在JSON对象与Java对象之间进行转换的强大工具。它的全称是Google Gson,允许我们轻松地将Java对象序列化为JSON字符串,或者从JSON字符串反序列化为Java对象。这篇内容将深入...

    Google gson

    Google Gson 是一个强大的Java库,由Google开发,用于在Java对象和JSON数据之间进行相互转换。这个库使得Java对象能够轻松地被序列化为JSON格式的字符串,同时也能将JSON字符串解析为相应的Java对象,极大地简化了...

    google_gson_2.3.1

    谷歌的Gson库是Java开发者处理JSON数据的强大工具。标题中的"google_gson_2.3.1"指的是Google发布的Gson库的2.3.1版本,这是一个用于在Java对象和JSON数据之间进行互相转换的开源库。下面将详细阐述Gson库的功能、...

    com.google.gson.Gson 2.8.5 jar包

    截止至2018-11-27,github上com.google.gson.Gson 最新的2.8.5jar包。强大的json字符串解析功能及将字符串转换为json格式。我16年上传的免费下载的2.8.0版本不知道为什么变成下载需要50分了

    Json转换利器Gson实例代码

    Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 ...

    Google发布的强大的gson包

    谷歌的Gson库是一款高效的Java库,用于在Java对象和JSON数据之间进行映射。它的主要功能是将Java对象转换为对应的JSON字符串,同时也可以将JSON文本解析为等效的Java对象。Gson 2.1是这个库的一个重要版本,它在性能...

    com.google.gson.Gson 2.8.0 jar包

    截止至2016-12-23,github上com.google.gson.Gson 最新的2.8.0jar包。强大的json字符串解析功能及将字符串转换为json格式。才发现需要这么多分,大家也可以去网盘下载: ...

    Google - gson

    谷歌的Gson库是一款强大的Java库,用于将Java对象转换为JSON(JavaScript Object Notation)格式,反之亦然。这个库使得在Java应用程序中处理JSON数据变得极其简单,尤其适用于那些需要在网络通信、存储或者显示JSON...

    com.google.gson.Gson-2.8.2

    Gson是Google开发的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。它的全称是Google Gson,版本2.8.2是该库的一个稳定版本,提供了高效的性能和丰富的功能。在这个版本中,Gson库继续优化了其核心功能,...

    google-gson-2.2.4.zip

    谷歌的Gson库是Java开发人员用来在JSON和Java对象之间进行序列化和反序列化的强大工具。这个"google-gson-2.2.4.zip"压缩包包含了Gson库的2.2.4版本,这是一个广泛使用的稳定版本,适用于各种项目需求。Gson库允许...

    googlegson

    谷歌的Gson库是一个强大的Java库,它允许开发者将Java对象转换为JSON格式的字符串,同时也能将JSON数据解析回等效的Java对象。这个工具类对于处理JSON数据,尤其是在服务器端与客户端之间的数据交换中,显得尤为重要...

    Google Gson 2.8.4 - 谷歌的Json解析包

    Google Gson是谷歌开发的一款强大的JSON解析库,它允许开发者在Java对象和JSON数据之间进行相互转换。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛应用于Web服务和应用程序之间的数据通信...

    Google Gson解析Json数据应用实例

    在Java开发中,Google Gson库是一个非常流行的工具,用于将Java对象转换为JSON字符串,以及将JSON字符串反序列化回Java对象。这个“Google Gson解析Json数据应用实例”旨在深入探讨Gson库的使用,帮助开发者更好地...

Global site tag (gtag.js) - Google Analytics