JSON解析json的jar包用什么包比较好

json 解析的第三方jar包,用于 对象,超好用 Jsp/Servlet 243万源代码下载-
&文件名称: json& & [
& & & & &&]
&&所属分类:
&&开发工具: Java
&&文件大小: 313 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:json 解析的第三方jar包,用于解析json对象,超好用-third party jar package json resolution for parsing json object Chaohaoyong
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&新建文件夹 (2)\fastjson-1.1.25.jar&&新建文件夹 (2)
&输入关键字,在本站243万海量源码库中尽情搜索:【Android开发经验】超好用的json解析工具——Gson项目使用详解 - 博客频道 - CSDN.NET
专注Android移动开发,热爱分享,支持开源
分类:Android开发经验Android与服务器数据交互
& & 转载请注明出处:& & 在上一篇文章中,我们简单的介绍了json数据格式,并介绍了如何使用Android自带的json工具,完成json数据的生成与解析。但是就像我所说的,自带的工具类太难用了!因此这篇文章,会介绍一个json解析的非常好的工具,那就是google的开源项目Gson。& & 咱们这次不介绍Gson里面的常用类了,因为常用的几个类非常的简单,我们直接上手开始用,看看Gson是多么的强大!& & 当然,如果使用第三方的项目,我们肯定要导入jar包了,百度一搜一大把哈。& & 先给出测试的Model代码package com.example.
public class Person {
public String getName() {
public void setName(String name) {
this.name =
public int getAge() {
public void setAge(int age) {
this.age =
public Birthday getBirthday() {
public void setBirthday(Birthday birthday) {
this.birthday =
public Person() {
public Person(String name, int age, Birthday birthday) {
this.name =
this.age =
this.birthday =
public String toString() {
return &Person [name=& + name + &, age=& + age + &, birthday=&
+ birthday + &]&;
}& & 为了让构造的对象更加复杂,所以定义了这个类,这样person类的属性就不只有基本数据类型了,让我们的测试更有代表性。package com.example.
* @ClassName: com.example.jsondemo.Birthday
* @Description: 生日类
* @author zhaokaiqiang
上午10:29:47
public class Birthday {
public int getYear() {
public void setYear(int year) {
this.year =
public int getMonth() {
public void setMonth(int month) {
this.month =
public int getDay() {
public void setDay(int day) {
this.day =
public Birthday() {
public Birthday(int year, int month, int day) {
this.year =
this.month =
this.day =
public String toString() {
return &Birthday [year=& + year + &, month=& + month + &, day=& + day
& & 1.Object与Json的相互转换& & 咱们先从最简单的单一对象开始说。& & 下面是代码实现/**
* 单一对象的json生成与解析
public void objectToJson() {
Person p = new Person(&zhaokaiqiang&, 22, new Birthday());
Gson gson = new Gson();
String jsonString = gson.toJson(p);
Log.d(TAG, &---------单一对象生成--------&);
Log.d(TAG, jsonString);
Person person = gson.fromJson(jsonString, Person.class);
Log.d(TAG, &---------单一对象解析--------&);
Log.d(TAG, person.toString());
}& & 这代码是多么的简洁,美观啊!& & 在上一篇的文章中,如果要生成简单对象的话,我们还需要自己指定key,然后设置value,自从用了Gson,我们再也没有这些烦恼了!而且为了说明Gson的强大之处,我还特意给Person设置了一个对象Birthday,如果使用自带的json工具,那不就麻烦死了。但是使用Gson,根本不需要有这些顾虑。看下面的转换结果,一个toJson(),完全解决问题,太棒了!11-26 16:16:38.392: D/GsonTest(16931): ---------单一对象生成--------
11-26 16:16:38.392: D/GsonTest(16931): {&name&:&zhaokaiqiang&,&birthday&:{&day&:19,&month&:1,&year&:1992},&age&:22}
11-26 16:16:38.392: D/GsonTest(16931): ---------单一对象解析--------
11-26 16:16:38.392: D/GsonTest(16931): Person [name=zhaokaiqiang, age=22, birthday=Birthday [year=1992, month=1, day=19]]& & 2.集合泛型与Json的相互转换& & Gson除了可以很方便的与单一对象进行转换之外,还能够与集合进行转换。& & 下面是一个生成Json,并完成解析的代码:/**
* 集合对象的json生成与解析
public void objectsToJson() {
Gson gson = new Gson();
Person person = new Person(&zhaokaiqiang&, 22,
new Birthday());
ArrayList&Person& arrayList = new ArrayList&Person&();
arrayList.add(person);
arrayList.add(person);
arrayList.add(person);
String jsonString = gson.toJson(arrayList);
Log.d(TAG, &---------集合对象生成--------&);
Log.d(TAG, jsonString);
Type type = new TypeToken&ArrayList&Person&&() {
}.getType();
ArrayList&Person& persons = gson.fromJson(jsonString, type);
Log.d(TAG, &---------集合对象解析--------&);
Log.d(TAG, persons.toString());
}& & 这是转换出来的结果---------集合对象生成--------
[{&name&:&zhaokaiqiang&,&birthday&:{&day&:19,&month&:1,&year&:1992},&age&:22},{&name&:&zhaokaiqiang&,&birthday&:{&day&:19,&month&:1,&year&:1992},&age&:22},{&name&:&zhaokaiqiang&,&birthday&:{&day&:19,&month&:1,&year&:1992},&age&:22}]
---------集合对象解析--------
[Person [name=zhaokaiqiang, age=22, birthday=Birthday [year=1992, month=1, day=19]], Person [name=zhaokaiqiang, age=22, birthday=Birthday [year=1992, month=1, day=19]], Person [name=zhaokaiqiang, age=22, birthday=Birthday [year=1992, month=1, day=19]]]
& & 如果我们想使用json完成类似的功能,复杂度是不可想象的,但是使用Gson来实现的话,却是如此简单。& & 在使用Gson.toJson()方法的时候,我们可以把任何对象或者是集合放进去,就可以完美的转换成json格式。& & 如果想把json格式的数据转换成我们想要的对象,我们只需要调用Gson.fromJson()即可。& & 但是在转换的时候,第二个参数有两种形式,一种是Class&?&,这个是转换单一对象的时候,我们需要把对象.class传递进去,告诉转换器要转换的类型。如果我们需要转换的是集合类型,我们需要传递一个实现了Type接口的实例,具体语法就和上面的代码一样,只要把你用的集合类型还有具体的对象换一下就可以了。------------------------------------------------------------分割线------------------------------------------------------------------以上的内容是最简单的Gson的用法,我们基本上只使用到了Gson这一个类,对于基本需求来说没问题,但是,如果想要创建和解析复杂的Json数据,就有点不够了。为了说明如何使用Gson解析更加复杂的数据,特添加以下内容,即Gson的更高级用法------------------------------------------------------------分割线--------------------------------------------------------------------3.复杂json数据结构的构建与解析& & 我们首先看看如何构建复杂的Json数据。& & 上一篇文章中,我们已经知道Json数据有两种形式,Object形式(其实就是键值对形式),Array形式(即数组形式),我们以Object形式为例,介绍构建复杂Json。& & 在开始构造之前,我们需要先介绍几个常用对象。& & Gson:这个类在前面已经用过了,是我们完成json转换和解析的主要类,主要使用toJson()和fromJson()这两个方法。& & JsonObject:这个是我们构建Object形式的Json数据的主要类,我们可以设置key和value。& & JsonElement:这个是Json元素类,它里面可以是一个JsonObject、JsonArray、JsonNull或者是一个JsonPrimitive。注意,它里面的数据只能看作是一个元素。& & JsonArray:这个是我们想构造Array形式的主要类,我们可以往数组里面添加数据,数据是有序的。& & JsonParser:这个是Json的解析器,主要作用是把一个Json形式的字符串转换成一个JsonElement对象。& &&& & 介绍完这些常用对象之后,我们下面看一下代码实现吧。public String getJsonString() {
Person p = new Person(&zhaokaiqiang&, 22, new Birthday());
JsonElement jsonElement = new JsonParser().parse(new Gson().toJson(p));
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty(&name&, &zhao&);
jsonObject.addProperty(&age&, 22);
jsonObject.add(&person&, jsonElement);
Log.d(TAG, &getJsonString------& + jsonObject.toString());
return jsonObject.toString();
}& & 在上面的方法中,我们使用JsonParser和Gson只是为了获取一个JsonElement对象,因为使用JsonObject构造Object形式的Json数据的时候,基本数据类型可以使用addProperty()方法直接添加进去,但是如果想添加类的话,必须包装成一个JsonElement对象之后才能够添加,所以先用Gson的toJson()转换成一个Json格式的数据,然后使用JsonParser转换成一个JsonElement,使用add()添加进去之后,直接JsonObject.toString()就可以获取到复杂对象的Json格式数据了。& & 下面是输出的结果,没有任何问题。getJsonString------{&name&:&zhao&,&age&:22,&person&:{&name&:&zhaokaiqiang&,&birthday&:{&day&:19,&month&:1,&year&:1992},&age&:22}}& & 知道了如何使用上面的这些类实现Json数据构建之后,下面我们讲解一下如何解析上面的这种复杂的json数据。& & 我们先看代码吧public void fromJsonString() {
Gson gson = new Gson();
JsonElement jsonElement = new JsonParser().parse(getJsonString());
JsonObject jsonObject = jsonElement.getAsJsonObject();
JsonElement personElement = jsonObject.get(&person&);
Person person = gson.fromJson(personElement, Person.class);
JsonElement nameElement = jsonObject.get(&name&);
String name = nameElement.getAsString();
JsonElement ageElement = jsonObject.get(&age&);
int age = ageElement.getAsInt();
Log.d(TAG, &person-----& + person);
Log.d(TAG, &name-----& + name);
Log.d(TAG, &age-----& + age);
}& & 如果我们要进行解析,我们必须获取到JsonElement对象,然后转换成JsonObject对象之后才能继续处理,所以在代码中进行了这样的处理。因为JsonElement是我们处理的基本元素,所以在获取到JsonObject之后,我们还需要根据key获取到对应value的JsonElement对象,然后根据不同的类型进行不同的转换即可。& & 知道了这些之后,完成80%的业务需求应该没问题了。& & 休息,休息一下...
排名:第1129名
本博客不再更新,
(72)(28)(4)(17)(6)(4)(2)(3)(6)(7)
个人博客说明2802人阅读
Java技术(60)
Java框架学习(54)
引言: JSON的流行推动了JSON开发包的大量使用,如何高效、简便的开发json字符串的输入和输出,是我们在开发中经常会碰到的问题,这里我们以jackson2为例来讲解如何使用它。1.& Jackson的版本以及maven依赖& Jackson的最新版本是2.8.1,& 以下是在maven项目中的依赖信息:
&dependency&
&groupId&com.fasterxml.jackson.core&/groupId&
&artifactId&jackson-core&/artifactId&
&version&2.8.1&/version&
&/dependency&
&!-- /artifact/com.fasterxml.jackson.core/jackson-databind --&
&dependency&
&groupId&com.fasterxml.jackson.core&/groupId&
&artifactId&jackson-databind&/artifactId&
&version&2.8.1&/version&
&/dependency&
&!-- /artifact/com.fasterxml.jackson.core/jackson-annotations --&
&dependency&
&groupId&com.fasterxml.jackson.core&/groupId&
&artifactId&jackson-annotations&/artifactId&
&version&2.8.1&/version&
&/dependency&
& 在以下示例代码中使用的一个依赖包是apache-common中的lang增强包:
&dependency&
&groupId&mons&/groupId&
&artifactId&commons-lang3&/artifactId&
&version&3.4&/version&
&/dependency&
2.&& 使用示例&&& 实体类定义:@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class JSONCaseA {
@JsonProperty(&testa&)
@JsonIgnore
private String unknownA
public int getAge() {
public void setAge(int age) {
this.age =
public String getUnknownAttr() {
return unknownA
public void setUnknownAttr(String unknownAttr) {
this.unknownAttr = unknownA
public String getLocation() {
public void setLocation(String location) {
this.location =
public String getCity() {
public void setCity(String city) {
this.city =
public String toString() {
&return ReflectionToStringBuilder.toString(this);
}2.1 将对象转换为json字符串 测试代码:public class TestWriteJson {
public void writeJson() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
JSONCaseA case1 = new JSONCaseA();
case1.setCity(&BeiJing&);
case1.setUnknownAttr(&testVal&);
case1.setAge(123);
String jsonStr = mapper.writeValueAsString(case1);
System.out.println(&JSON:& + jsonStr);
}& 结果输出为: JSON:{&city&:&BeiJing&,&testa&:123}& 代码中使用的标注分析:&& @JsonProperty(&xxx&):& 将当前的属性名在json字符串中重新命名为当前设置的这个值,比如在示例中,将age--&testa&& @JsonIgnore&&& 将被标注的属性在生成json字符串的时候,直接忽略&& @JsonInclude& 是一个类级别的设置,JsonInclude.Include.NON_EMPTY标识只有非NULL的值才会被纳入json string之中,其余的都被忽略,比如这里的location属性,并没有出现在最终的结果字符串中。&&& 2.2& 根节点以及使用&&&& 实体类定义:@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonRootName(value=&rootNode&)
public class JsonCaseB {
@JsonRawValue
private String address = &$#&;
@JsonIgnore
public String getAddress() {
public void setAddress(String address) {
this.address =
public int getAge() {
public void setAge(int age) {
this.age =
public String getSex() {
public void setSex(String sex) {
this.sex =
public String toString() {
&return ReflectionToStringBuilder.toString(this);
& 测试代码:public class TestRootNode {
public void testRootNode() throws JsonProcessingException {
JsonCaseB caseb = new JsonCaseB();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
caseb.setAge(123);
caseb.setSex(&Boy&);
String jsonStr = mapper.writeValueAsString(caseb);
System.out.println(&JSON:& + jsonStr);
}& 输出结果:JSON:{&rootNode&:{&address&:$#,&age&:123}}& 关于其中使用的annotation的说明:& @JsonRootName(value=&rootNode&)&& 使用在类上,标注为该类在转换为json string的时候,需要新增一个根节点rootNode.&& mapper.enable(SerializationFeature.WRAP_ROOT_VALUE):& 在mapper级别设置为使用root node方可输出根节点,否则根节点无效。&& 2.3 读取操作&&&&& 测试代码:@Test
public void testReadJson() throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
String inputjsonstr = &{\&city\&:\&BeiJing\&,\&testa\&:123}&;
JSONCaseA readcase = mapper.readValue(inputjsonstr, JSONCaseA.class);
System.out.println(&object info:& + readcase);
}& 输出结果:& object info:org.homework.test.json.JSONCaseA@7d907bac[age=123,unknownAttr=&null&,location=&null&,city=BeiJing]&& 结果分析:&&& json字符串中有2个属性, 目标对象中有4个属性,这个四个属性包含了json字符串中的2个属性;可以发现在JSONCaseA中的属性使用了缺省值,可以正常解析出来结果。2.4& 在读取过程中,如果json字符串中出现未知属性&&& 测试代码:@Test
public void testReadJson() throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
String inputjsonstr = &{\&city\&:\&BeiJing\&,\&testa\&:123, \&who\&:\&zhangsan\&}&;
JSONCaseA readcase = mapper.readValue(inputjsonstr, JSONCaseA.class);
System.out.println(&object info:& + readcase);
}&&& 输出结果:Exception in thread &main& com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field &who& (class org.homework.test.json.JSONCaseAReadUnknowAttr), not marked as ignorable (3 known properties: &city&, &location&, &testa&])
at [Source: {&city&:&BeiJing&,&testa&:123, &who&:&zhangsan&}; line: 1, column: 39] (through reference chain: org.homework.test.json.JSONCaseAReadUnknowAttr[&who&])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:62)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:833)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1096)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1467)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1445)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:282)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3789)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2833)
at org.homework.test.json.JSONCaseAReadUnknowAttr.main(JSONCaseAReadUnknowAttr.java:81)& 结果分析: 异常中提示未知属性who,无法解析。& 那么该如何来解决这个问题呢? 新如下设置语句:mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);& 这个设置将禁止使用出现未知属性之时,抛出异常。&& 重新执行代码,就可以正常使用了。3. 其他相关的Annotation&& @JsonSerialize 使用自定义的类来实现自定义的字段转换。写入操作。&& @JsonDeserialize 解析的时候,自定义的转换器;读取操作。&& @JsonAutoDetect: 设置类的访问策略,是否所有的属性都可以,还是按照一定的方式来提取。&& @JsonRawValue:&& 无转换的将属性值写入到json 字符串中。 写入操作&& @JsonValue:&&&& 标注方法,用以替代缺省的方法,由该方法来完成json的字符输出。&&&&& 当然还有很多其他的标注,这里不再一一赘述,感兴趣或者需要的话,大家可以自行查找学习。 另外,jackson本身是支持xml和json两种输出的,基于同一套类库。4.& 参考资料& /java-json/jackson-annotations.html#jsonautodetect&/jackson-annotations/FasterXML/jackson-databind/wiki/Databind-Annotations
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:919322次
积分:9431
积分:9431
排名:第1500名
原创:276篇
转载:48篇
评论:106条
(1)(3)(6)(7)(18)(18)(9)(5)(3)(5)(1)(7)(3)(1)(7)(6)(4)(7)(2)(7)(2)(5)(1)(2)(10)(1)(9)(3)(5)(3)(2)(1)(2)(1)(4)(14)(8)(6)(9)(1)(4)(12)(1)(1)(2)(2)(1)(3)(2)(1)(2)(3)(1)(2)(1)(3)(1)(5)(4)(2)(1)(1)(4)(1)(13)(23)(26)(3)(1)(2)}

我要回帖

更多关于 json解析jar包 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信