- 浏览: 388647 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (215)
- ubuntu (27)
- 虚拟机 (13)
- 数据库 (29)
- JAVA (40)
- 搜索 (23)
- 开发工具 (2)
- 产品 (2)
- 工具 (1)
- 应用服务器 (5)
- linux (17)
- log (1)
- 多线程 (3)
- 异常 (1)
- shell (6)
- 12306 ;互联网 (1)
- 持续集成&Hudson (4)
- js (1)
- JAVA OR-Map (1)
- 漏洞 (1)
- svn (1)
- MAVEN (3)
- 架构 (1)
- windows (1)
- json (1)
- web (3)
- jenkins (2)
- iptables (2)
- JAVA ssh (0)
- 项目管理 (1)
- tomcat (1)
- 安全 (1)
- 数据库 mysql (1)
- 性能 (1)
最新评论
-
sbwfgihc:
怎么用的啊,
<转>mysql 树查询语句 -
panghaoyu:
实现一个智能提示功能需要ajax、数据库、jsp/php、算法 ...
<转>Solr Suggest实现搜索智能提示 -
songsove:
请问您qq多少
solr 对拼音搜索和拼音首字母搜索的支持 -
panghaoyu:
实现一个智能提示功能需要ajax、数据库、jsp/php、算法 ...
<转>Solr Suggest实现搜索智能提示 -
norain1988:
这样就可以实现相关搜索了吗
solr 百度相关搜索类似功能的实现
原链:http://www.cnblogs.com/langtianya/archive/2013/04/09/3009235.html
http://blog.sina.com.cn/s/blog_9d0ce63d01012vmd.html JacksonDemo及使用方法
本文依据springside实例,演示Jackson的基本使用方式及大量的特殊Feature.一共13种使用方法。
基于json-lib.jar包Json实例程序 1.JSONObject to DynaBean String json = "{name=\"json\",bool:true,int:1,double:2.2}"; JSONObject jsonObject = JSONObject.fromObject(json); //抽象的写法:DynaBean bean = (DynaBean) JSONSerializer.toJava( jsonObject ); Object bean = JSONObject.toBean(jsonObject); //Object bean1 = JSONSerializer.toJava(jsonObject); assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean, "name")); assertEquals(jsonObject.get("bool"), PropertyUtils.getProperty(bean, "bool")); assertEquals(jsonObject.get("int"), PropertyUtils.getProperty(bean, "int")); assertEquals(jsonObject.get("double"), PropertyUtils.getProperty(bean, "double")); 2.JSONObject to JavaBean String json = "{name:\"zhangsan\",age:25,hight:1.72,sex:true}"; JSONObject jsonObject = JSONObject.fromObject(json); UserBean bean = (UserBean) JSONObject.toBean(jsonObject, UserBean.class); System.out.println(jsonObject); 理论上,这样就可以了,但时,有异常Caused by: java.lang.NoSuchMethodException: com.json.Json$UserBean.<init>() 3.JSONArray to List String json = "[\"first\",\"second\"]"; JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(json); List output = (List) JSONSerializer.toJava(jsonArray); 4.JSONArray to array String json = "[\"first\",\"second\"]"; JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(json); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY); Object[] output = (Object[]) JSONSerializer.toJava(jsonArray, jsonConfig); Object[] expected = new Object[] { "first", "second" }; ArrayAssertions.assertEquals(expected, output); 5.JSON 字符串 专为 JavaBean(刘慧斌demo 演示需要的jar包在附件里) String str="[{\"id\":\"328\",\"mestype\":\"inbox\"},{\"id\":\"327\",\"mestype\":\"inbox\"},{\"id\":\"279\",\"mestype\":\"already\"},{\"id\":\"278\",\"mestype\":\"already\"},{\"id\":\"277\",\"mestype\":\"already\"},{\"id\":\"310\",\"mestype\":\"inbox\"},{\"id\":\"308\",\"mestype\":\"inbox\"},{\"id\":\"305\",\"mestype\":\"inbox\"},{\"id\":\"304\",\"mestype\":\"inbox\"},{\"id\":\"303\",\"mestype\":\"inbox\"}]"; JSONArray jsonArray=(JSONArray) JSONSerializer.toJSON(str); List list=(List)JSONSerializer.toJava(jsonArray); for (Object obj: list) { JSONObject jsonObject = JSONObject.fromObject(obj); MessageBean bean = (MessageBean) JSONObject.toBean(jsonObject, MessageBean.class); String id=bean.getId()+""; String type=bean.getMestype(); System.out.println(id+" "+type); } System.out.println(list.size());
http://blog.sina.com.cn/s/blog_9d0ce63d01012vmd.html JacksonDemo及使用方法
本文依据springside实例,演示Jackson的基本使用方式及大量的特殊Feature.一共13种使用方法。
public class JsonDemo { private static JsonMapper mapper = JsonMapper.buildNonDefaultMapper(); 1、序列化对象/集合到Json字符串. @Test public void toJson() throws Exception { //Bean TestBean bean = new TestBean("A"); String beanString = mapper.toJson(bean); System.out.println("Bean:" + beanString); assertEquals("{"name":"A"}", beanString); //Map Map<String, Object> map = Maps.newLinkedHashMap(); map.put("name", "A"); map.put("age", 2); String mapString = mapper.toJson(map); System.out.println("Map:" + mapString); assertEquals("{"name":"A","age":2}", mapString); //List<String> List<String> stringList = Lists.newArrayList("A", "B", "C"); String listString = mapper.toJson(stringList); System.out.println("String List:" + listString); assertEquals("["A","B","C"]", listString); //List<Bean> List<TestBean> beanList = Lists.newArrayList(new TestBean("A"), new TestBean("B")); String beanListString = mapper.toJson(beanList); System.out.println("Bean List:" + beanListString); assertEquals("[{"name":"A"},{"name":"B"}]", beanListString); //Bean[] TestBean[] beanArray = new TestBean[] { new TestBean("A"), new TestBean("B") }; String beanArrayString = mapper.toJson(beanArray); System.out.println("Array List:" + beanArrayString); assertEquals("[{"name":"A"},{"name":"B"}]", beanArrayString); } 2、从Json字符串反序列化对象/集合. @Test public void fromJson() throws Exception { //Bean String beanString = "{"name":"A"}"; TestBean bean = mapper.fromJson(beanString, TestBean.class); System.out.println("Bean:" + bean); //Map String mapString = "{"name":"A","age":2}"; Map<String, Object> map = mapper.fromJson(mapString, HashMap.class); System.out.println("Map:"); for (Entry<String, Object> entry : map.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } //List<String> String listString = "["A","B","C"]"; List<String> stringList = mapper.fromJson(listString, List.class); System.out.println("String List:"); for (String element : stringList) { System.out.println(element); } //List<Bean> String beanListString = "[{"name":"A"},{"name":"B"}]"; JavaType beanListType = mapper.constructParametricType(List.class, TestBean.class); List<TestBean> beanList = mapper.fromJson(beanListString, beanListType); System.out.println("Bean List:"); for (TestBean element : beanList) { System.out.println(element); } } 3、 测试三种不同的Binder. @Test public void threeTypeBinders() { TestBean bean = new TestBean("A"); //打印全部属性 JsonMapper normalMapper = JsonMapper.buildNormalMapper(); assertEquals("{"nullValue":null,"name":"A","defaultValue":"hello"}", normalMapper.toJson(bean)); //不打印nullValue属性 JsonMapper nonNullMapper = JsonMapper.buildNonNullMapper(); assertEquals("{"name":"A","defaultValue":"hello"}", nonNullMapper.toJson(bean)); //不打印默认值未改变的nullValue与defaultValue属性 JsonMapper nonDefaultMaper = JsonMapper.buildNonDefaultMapper(); assertEquals("{"name":"A"}", nonDefaultMaper.toJson(bean)); } 4、测试传入空对象,空字符串,Empty的集合,"null"字符串的结果. @Test public void nullAndEmpty() { // toJson测试 // //Null Bean TestBean nullBean = null; String nullBeanString = mapper.toJson(nullBean); assertEquals("null", nullBeanString); //Empty List List<String> emptyList = Lists.newArrayList(); String emptyListString = mapper.toJson(emptyList); assertEquals("[]", emptyListString); // fromJson测试 // //Null String for Bean TestBean nullBeanResult = mapper.fromJson(null, TestBean.class); assertNull(nullBeanResult); nullBeanResult = mapper.fromJson("null", TestBean.class); assertNull(nullBeanResult); //Null/Empty String for List List nullListResult = mapper.fromJson(null, List.class); assertNull(nullListResult); nullListResult = mapper.fromJson("null", List.class); assertNull(nullListResult); nullListResult = mapper.fromJson("[]", List.class); assertEquals(0, nullListResult.size()); } 5、测试对枚举的序列化,可以选择用一个int字段而不是以Name来序列化,以减少少长度. @Test public void enumData() { //默認使用enum.name() assertEquals(""One"", mapper.toJson(TestEnum.One)); assertEquals(TestEnum.One, mapper.fromJson(""One"", TestEnum.class)); //使用enum.toString() //注意,index會通過toString序列成字符串而不是int,否則又和順序號混淆. //注意配置必須在所有讀寫動作之前調用. JsonMapper newMapper = JsonMapper.buildNormalMapper(); newMapper.setEnumUseToString(true); assertEquals(""1"", newMapper.toJson(TestEnum.One)); assertEquals(TestEnum.One, newMapper.fromJson(""1"", TestEnum.class)); } 枚举的演示Bean. public static enum TestEnum { One(1), Two(2), Three(3); private int index; TestEnum(int index) { this.index = index; } @Override public String toString() { return new Integer(index).toString(); } } 6、测试对日期的序列化. @Test public void dateData() { DateTime jodaDate = new DateTime(); //日期默认以Timestamp方式存储 Date date = new Date(jodaDate.getMillis()); String tsString = String.valueOf(jodaDate.getMillis()); assertEquals(tsString, mapper.toJson(date)); assertEquals(date, mapper.fromJson(tsString, Date.class)); } 7、 JSON字符串里只含有Bean中部分的属性,更新一个已存在Bean,只覆蓋部分的属性. @Test public void updateBean() { String jsonString = "{"name":"A"}"; TestBean bean = new TestBean(); bean.setDefaultValue("Foobar"); bean = mapper.update(bean, jsonString); assertEquals("A", bean.getName()); assertEquals("Foobar", bean.getDefaultValue()); } 8、测试父子POJO间的循环引用. @Test public void parentChildBean() { //初始化对象关系,parent的Childs里含有 child1,child2, child1/child2的parent均指向parent. ParentChildBean parent = new ParentChildBean("parent"); ParentChildBean child1 = new ParentChildBean("child1"); child1.setParent(parent); parent.getChilds().add(child1); ParentChildBean child2 = new ParentChildBean("child2"); child2.setParent(parent); parent.getChilds().add(child2); String jsonString = "{"childs":[{"name":"child1"},{"name":"child2"}],"name":"parent"}"; //打印parent的json输出,json字符串裡childs中的child1/child2都不包含到parent的屬性 assertEquals(jsonString, mapper.toJson(parent)); //注意此時如果單獨打印child1,也不會打印parent,信息將丟失。 assertEquals("{"name":"child1"}", mapper.toJson(child1)); //反向序列化时,Json已很聪明的把parent填入child1/child2中. ParentChildBean parentResult = mapper.fromJson(jsonString, ParentChildBean.class); assertEquals("parent", parentResult.getChilds().get(0).getParent().getName()); } 父子POJO父子POJO的演示Bean,@JsonBackReference 与 @JsonManagedReference 是关键. public static class ParentChildBean { private String name; private ParentChildBean parent; public List<ParentChildBean> childs = Lists.newArrayList(); public ParentChildBean() { } public ParentChildBean(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } //注意getter與setter都要添加annotation @JsonBackReference public ParentChildBean getParent() { return parent; } @JsonBackReference public void setParent(ParentChildBean parent) { this.parent = parent; } @JsonManagedReference public List<ParentChildBean> getChilds() { return childs; } @JsonManagedReference public void setChilds(List<ParentChildBean> childs) { this.childs = childs; } } 9、測試可擴展Bean,會自動的把確定的屬性放入固定的成員變量, 其他屬性放到一个类型为Map的成员变量裡,能很好的支持Bean版本升级时固定属性的变动. @Test public void extensibleBean() { //一个没有区分是变量还是Map的普通JSON字符串. String jsonString = "{"name" : "Foobar","age" : 37,"occupation" : "coder man"}"; ExtensibleBean extensibleBean = mapper.fromJson(jsonString, ExtensibleBean.class); assertEquals("Foobar", extensibleBean.getName()); assertEquals(null, extensibleBean.getProperties().get("name")); assertEquals("coder man", extensibleBean.getProperties().get("occupation")); } 演示用的可擴展Bean.@JsonAnySetter与@JsonAnyGetter是关键. public static class ExtensibleBean { private String name; // we always have name private HashMap<String, String> properties = Maps.newHashMap(); public ExtensibleBean() { } @JsonAnySetter public void add(String key, String value) { properties.put(key, value); } @JsonAnyGetter public Map<String, String> getProperties() { return properties; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 10、測試序列化Bean时使用不同的View序列化不同的属性组, 及@JsonIgnore標註的屬性. @Test public void viewBean() throws JsonGenerationException, JsonMappingException, IOException { ViewBean viewBean = new ViewBean(); viewBean.setName("Foo"); viewBean.setAge(16); viewBean.setOtherValue("others"); viewBean.setIgnoreValue("ignored"); ObjectWriter publicWriter = mapper.getMapper().writerWithView(Views.Public.class); assertEquals("{"otherValue":"others","name":"Foo"}", publicWriter.writeValueAsString(viewBean)); ObjectWriter internalWriter = mapper.getMapper().writerWithView(Views.Internal.class); assertEquals("{"age":16,"otherValue":"others"}", internalWriter.writeValueAsString(viewBean)); //設置默認是否顯示沒有用@Json定義的屬性 JsonMapper newMapper = JsonMapper.buildNormalMapper(); newMapper.getMapper().configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false); publicWriter = newMapper.getMapper().writerWithView(Views.Public.class); assertEquals("{"name":"Foo"}", publicWriter.writeValueAsString(viewBean)); } public static class Views { static class Public { } static class Internal { } } 演示序列化不同View不同属性的Bean. public static class ViewBean { private String name; private int age; private String otherValue; private String ignoreValue; @JsonView(Views.Public.class) public String getName() { return name; } public void setName(String name) { this.name = name; } @JsonView(Views.Internal.class) public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getOtherValue() { return otherValue; } public void setOtherValue(String otherValue) { this.otherValue = otherValue; } @JsonIgnore public String getIgnoreValue() { return ignoreValue; } public void setIgnoreValue(String ignoreValue) { this.ignoreValue = ignoreValue; } } 11、 测试自定义转换器 @Test public void customConverter() { JsonMapper newMapper = JsonMapper.buildNonNullMapper(); SimpleModule testModule = new SimpleModule("MyModule", new Version(1, 0, 0, null)); testModule.addSerializer(new MoneySerializer()); // assuming serializer declares correct class to bind to testModule.addDeserializer(Money.class, new MoneyDeserializer()); newMapper.getMapper().registerModule(testModule); Money money = new Money(1.2); String jsonString = newMapper.toJson(money); assertEquals(""1.2"", jsonString); Money resultMoney = newMapper.fromJson(jsonString, Money.class); assertEquals(new Double(1.2), resultMoney.value); } public class MoneySerializer extends SerializerBase<Money> { public MoneySerializer() { super(Money.class); } public void serialize(Money value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeString(value.toString()); } } public class MoneyDeserializer extends StdDeserializer<Money> { public MoneyDeserializer() { super(Money.class); } @Override public Money deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { return Money.valueOf(jp.getText()); } } public static class Money { private Double value; public Money(Double value) { this.value = value; } public static Money valueOf(String value) { Double srcValue = Double.valueOf(value); return new Money(srcValue); } public String toString() { return value.toString(); } } 12、测试修改属性名策略 @Test public void customPropertyNameing() throws JsonMappingException { TestBean bean = new TestBean("foo"); bean.setDefaultValue("bar"); JsonMapper newMapper = JsonMapper.buildNonNullMapper(); newMapper.getMapper().setPropertyNamingStrategy(new LowerCaseNaming()); String jsonpString = newMapper.toJson(bean); assertEquals("{"name":"foo","defaultvalue":"bar"}", jsonpString); } public static class LowerCaseNaming extends PropertyNamingStrategy { @Override public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) { return defaultName.toLowerCase(); } } 13、 測試輸出jsonp格式內容. @Test public void jsonp() { TestBean bean = new TestBean("foo"); String jsonpString = mapper.toJsonP("callback", bean); assertEquals("callback({"name":"foo"})", jsonpString); } 演示Bean, 主要演示不同風格的Mapper對Null值,初始化後沒改變過的屬性值的處理. public static class TestBean { private String name; private String defaultValue = "hello"; //默认值没被修改过的属性,可能会不序列化 private String nullValue = null; //空值的据行,可能会不序列化 public TestBean() { } public TestBean(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDefaultValue() { return defaultValue; } public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } public String getNullValue() { return nullValue; } public void setNullValue(String nullValue) { this.nullValue = nullValue; } @Override public String toString() { return "TestBean [defaultValue=" + defaultValue + ", name=" + name + ", nullValue=" + nullValue + "]"; } } }
相关推荐
总的来说,`json-lib.jar`是一个强大的JSON处理工具,为Java开发者提供了一种简单的方式来处理JSON数据,广泛应用于各种需要数据交换的Java应用程序中。通过理解和熟练使用这个库,开发者可以提高其项目的数据处理...
为了能够正确运行`json-lib-2.4-jdk15.jar`并结合`jsoup`解析开彩网API接口的JSON数据,开发者需要确保拥有所有必需的依赖JAR包。这些依赖可能包括但不限于以下组件: 1. **json-lib**:主要的JSON处理库,包含JSON...
开发者需要在项目中引入JSON-Lib的jar包,包括主库和其依赖,确保所有必要的类和方法都能被正确加载。 总结起来,JSON-Lib是一个强大的工具,它为Java开发者提供了一种高效且直观的方式来处理JSON数据。无论是在...
《深入理解log4j-api-2.17.1.jar与log4j-core-2.17.1.jar》 在Java开发中,日志管理是不可或缺的一部分,它帮助我们跟踪程序运行状态、定位错误和调试问题。Log4j作为一款广泛使用的日志框架,历经多次迭代,现在...
`json-lib-2.2.3-jdk15.jar` 是一个针对Java开发的JSON处理库,它允许Java程序员方便地将Java对象转换为JSON格式的字符串,同时也能将JSON文本解析回相应的Java对象。 这个特定版本的json-lib是2.2.3版,兼容Java ...
这个"json-lib依赖jar包.rar"包含了实现这一功能所需的JAR文件。 在Java开发中,`json-lib`是一个重要的工具,特别是在处理JSON数据时。以下是一些关键知识点: 1. **JSON对象与Java对象的映射**:`json-lib`允许...
在Java开发中,`json.libjar`包通常指的是`json-lib`库,这是一个用于处理JSON的Java库,能够帮助开发者在Java程序中进行JSON数据的序列化和反序列化。 `json-lib`库是由Eclipse开源社区开发的,它提供了多种Java...
标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...
通过json-lib,我们可以将JavaBean对象转换为JSON字符串,也可以将JSON字符串反序列化为JavaBean实例,这对于构建基于JSON的数据服务非常有用。 3. **Map与JSON**:Map是Java中的一种数据结构,用于存储键值对。...
- **JSON与XML的互转**:`json-lib`还支持JSON和XML之间的转换,这对于那些需要在两种格式间切换的应用场景非常实用。 - **类型适配器**:库提供了一种机制,允许自定义特定类型(如自定义类)到JSON的转换,通过...
在开发基于Spring MVC的Web应用时,我们常常会遇到数据传输的问题,特别是在处理RESTful API时,使用`@ResponseBody`注解将Java对象转换为JSON格式返回给客户端。然而,有时候这种转换过程中可能会出现错误,比如...
标题"json-lib-2.4所需全部JAR包及方法演示"表明,这个压缩包包含了json-lib库的2.4版本所有必需的JAR文件,以及如何使用这些库进行JSON操作的示例代码。这意味着开发者可以下载这些JAR文件,将其添加到项目构建路径...
总的来说,JSONJar包为Java开发者提供了一个简单易用的工具来处理JSON数据,使得在应用程序中传递和存储数据变得更加便捷。在实际项目中,你可能会结合其他HTTP客户端库(如Apache HttpClient或OkHttp)来发送和接收...
在本例中,json-lib-2.1-jdk15.jar和json-rpc-1.0.jar已经经过验证,可以一起使用,这意味着开发者可以安心地在项目中集成这两个库,不必担心版本不兼容的问题。 总的来说,json-lib和json-rpc是Java开发中处理JSON...
2. **导入jar包**:下载完成后,将`json.jar`复制到JMeter的安装目录下的`lib`子目录。这样,JMeter在启动时会自动加载这个库。 3. **配置Beanshell**:在JMeter的测试计划中,添加一个Beanshell组件,如Beanshell ...
本资源包围绕“json-lib-2.4-jdk”展开,包含了该版本的JSON-Lib工具包以及相关的jar包,旨在提供全面的支持和教程资源。 JSON-Lib 2.4是该库的一个稳定版本,支持多种Java环境,包括JDK。在实际开发中,它可以帮助...
对于非Maven项目,可以直接将org.json.jar文件放入项目的lib目录,并配置到IDE的构建路径中。 5. **使用教程** - 导入库:在Java代码中,首先需要导入相关包: ```java import org.json.*; ``` - 创建JSON...
这个库使得在Java应用程序中处理JSON数据变得极其简单。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也方便机器解析和生成。在Java开发中,Gson库扮演着重要的角色,特别...
5. `json-lib-2.x.x.jar`: 如果包含,这就是用于处理JSON数据的库。 6. 可能还有其他依赖库,如`commons-logging-*.jar`用于日志记录,`commons-codec-*.jar`用于编码解码等。 使用这些jar包,开发者可以在他们的...