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; } 改成饥饿就行了
相关推荐
包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class ...
om.google.code.gson/gson/2.6.2 Gson maven依赖 java 开发包
json我们在网络请求中经常用到,最近最火的微信小程序开发中... 就会报错,因为对于嵌套类型的json它是解释不出来的,这时就需要用到com.google.gson.Gson.jar了。资源中提供了jar包与代码示例,一句代码解决您的问题。
com.google.gson.Gson 2.8.1 2.8.2 jar包 gson,直接解压到maven仓库,或者提取里面的jar包都可以使用
利用Google Gson实现JSON字符串和对象之间相互转换,内含源码和jar包
谷歌开发的 JSON 解析依赖包,2.8.0版本,包含依赖包、文档以及源码
截止至2016-12-23,github上com.google.gson.Gson 最新的2.8.0jar包。强大的json字符串解析功能及将字符串转换为json格式。才发现需要这么多分,大家也可以去网盘下载: ...
截止至2018-11-27,github上com.google.gson.Gson 最新的2.8.5jar包。强大的json字符串解析功能及将字符串转换为json格式。我16年上传的免费下载的2.8.0版本不知道为什么变成下载需要50分了
google Gson 的最基本的运用和基本的类型
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 ...
google gson post 简单例子,利用gson实例化实体类,异步请求网络。
google的Gson 包括jar包,gson-2.2.4-javadoc,gson-2.2.4-sources。
Google gson库能够实现定制化的序列化和反序列操作,能够简化Java序列化和反序列化操作
google-gson-2.2.4.zip
google json: gson
android google gson json解析
Google Gson解析Json数据应用实例
Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。 Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) from...
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库,可以快速的将一个 Json 字符转成一个 Java 对象,或者将一个 Java 对象转化为 Json 字符串。
Google发布的gson 2.1版本,专用于json格式的数据与java对象的互相转化,功能十分强大