您的位置:首页 > Web前端 > JavaScript

Jackson常用方法以及jacksonUtil工具类和回顾JSON数据格式回顾

2017-07-26 20:48 501 查看
项目中我们通常使用ajax返回json数据格式的形式进行前后端数据交互,所以会用到Java数据json数据互相转化,通常我们的做法是在项目中创建一个工具类进行转化处理。如下:我的demo包含了项目中常用的jacksonUtil类,以及常用的JSON
JAVA处理数据转化处理方法。

实体类book:

[java] view
plain copy

package test.entity;

public class Book {

private int bookId;//书的ID

private String author;//作者

private String name;//书名

private int price;//书价

public int getBookId() {

&nb
1fff7
sp; return bookId;

}

public void setBookId(int bookId) {

this.bookId = bookId;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

@Override

public String toString() {

return "Book [bookId=" + bookId + ", author=" + author + ", name="

+ name + ", price=" + price + "]";

}

}

jackson以及相关jar包对java以及json数据的具体处理方法,JackSonDemo类。

[java] view
plain copy

package test.jackson;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Set;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import test.entity.Book;

import com.fasterxml.jackson.core.JsonEncoding;

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.core.JsonParseException;

import com.fasterxml.jackson.databind.JsonMappingException;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JackSonDemo {

private JsonGenerator jsonGenerator = null;

private ObjectMapper objectMapper = null;

private Book book = null;

/**

* Junit的方法,用于给每个单元测试添加前置条件和结束条件

*/

@Before

public void init() {

// 构建一个Book实例对象并赋值

book = new Book();

book.setAuthor("海明威");

book.setBookId(123);

book.setName("老人与海");

book.setPrice(30);

objectMapper = new ObjectMapper();

try {

jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(

System.out, JsonEncoding.UTF8);

} catch (IOException e) {

e.printStackTrace();

}

}

@After

public void destory() {

try {

if (jsonGenerator != null) {

jsonGenerator.flush();

}

if (!jsonGenerator.isClosed()) {

jsonGenerator.close();

}

jsonGenerator = null;

objectMapper = null;

book = null;

System.gc();

} catch (IOException e) {

e.printStackTrace();

}

}

/********************** java常见数据类型转JSON ****************************/

/**

* 1.javaBean转化成json---两种方法writeObject/writeValue均可

* jsonGenerator依赖于ObjectMapper创建

*/

@Test

public void javaBeanToJson() {

try {

System.out.println("jsonGenerator");

// 方法一

jsonGenerator.writeObject(book);

System.out.println();

System.out.println("ObjectMapper");

// 方法二

objectMapper.writeValue(System.out, book);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* List转化成JSON,三种方式

*/

@Test

public void listToJson() {

try {

List<Book> list = new ArrayList<Book>();

Book bookOne = new Book();

bookOne.setAuthor("安徒生");

bookOne.setBookId(456);

bookOne.setName("安徒生童话");

bookOne.setPrice(55);

Book bookTwo = new Book();

bookTwo.setAuthor("安徒生");

bookTwo.setBookId(456);

bookTwo.setName("安徒生童话");

bookTwo.setPrice(55);

list.add(bookOne);

list.add(bookTwo);

// 方式一

System.out.println("方式一jsonGenerator");

jsonGenerator.writeObject(list);

System.out.println();

System.out.println("方式二ObjectMapper");

// 方式二

System.out.println(objectMapper.writeValueAsString(list));

// 方式三

System.out.println("方式三直接通过objectMapper的writeValue方法:");

objectMapper.writeValue(System.out, list);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* map转化成JSON,两种方式

*/

@Test

public void mapToJSON() {

try {

Map<String, Object> map = new HashMap<String, Object>();

map.put("name", book.getName());

map.put("book", book);

Book newBook = new Book();

newBook.setAuthor("安徒生");

newBook.setBookId(456);

newBook.setName("安徒生童话");

newBook.setPrice(55);

map.put("newBook", newBook);

System.out.println("第一种方式jsonGenerator");

jsonGenerator.writeObject(map);

System.out.println("");

System.out.println("第二种方式objectMapper");

objectMapper.writeValue(System.out, map);

} catch (IOException e) {

e.printStackTrace();

}

}

/*********************** JSON数据类型转java数据 ********************************/

/**

* json'对象'数据转化成javaBean

*/

@Test

public void jsonToJavaBean() {

String json = "{\"bookId\":\"11111\",\"author\":\"鲁迅\",\"name\":\"朝花夕拾\",\"price\":\"45\"}";

try {

Book book = objectMapper.readValue(json, Book.class);

System.out.println(book);

} catch (JsonParseException e) {

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}&nbs
4000
p;

}

/**

* json'数组'数据转化为ArrayList

*/

@Test

public void jsonToArrayList() {

String json = "[{\"bookId\":\"11111\",\"author\":\"鲁迅\",\"name\":\"朝花夕拾\",\"price\":\"45\"},"

+ "{\"bookId\":\"11111\",\"author\":\"鲁迅\",\"name\":\"朝花夕拾\",\"price\":\"45\"}]";

try {

Book[] book = objectMapper.readValue(json, Book[].class);

for (int i = 0; i < book.length; i++) {

// 注意book[i]仅仅是数组,需要通过Arrays.asList()方法转为ArrayList

List<Book> list = Arrays.asList(book[i]);

System.out.println(list);

}

} catch (JsonParseException e) {

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

&
1eac9
nbsp;}

/**

* json转换成map

*/

@Test

public void JsonToMap() {

String json = "{\"name\":\"book\",\"number\":\"12138\",\"book1\":{\"bookId\":\"11111\",\"author\":\"鲁迅\",\"name\":\"朝花夕拾\",\"price\":\"45\"},"

+ "\"book2\":{\"bookId\":\"22222\",\"author\":\"易中天\",\"name\":\"祖先\",\"price\":\"25\"}}";

try {

Map<String, Map<String, Object>> maps = objectMapper.readValue(

json, Map.class);

Set<String> key = maps.keySet();

Iterator<String> iter = key.iterator();

while (iter.hasNext()) {

String field = iter.next();

System.out.println(field + ":" + maps.get(field));

}

} catch (JsonParseException e) {

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

最后,是我们在实际开发项目中使用的jacksonUtil类,应用起来很简单,直接jacksonUtil.bean2Json(Object object)(bean转JSON)或者jacksonUtil.json2Bean(Object object)(JSON转bean)

[java] view
plain copy

package test.util;

import java.io.IOException;

import java.io.StringWriter;

import com.fasterxml.jackson.core.JsonFactory;

import com.fasterxml.jackson.core.JsonGenerator;

import com.fasterxml.jackson.core.JsonParseException;

import com.fasterxml.jackson.databind.JsonMappingException;

import com.fasterxml.jackson.databind.ObjectMapper;

/**

* bean转json格式或者json转bean格式, 项目中我们通常使用这个工具类进行json---java互相转化

*/

public class JacksonUtil {

private static ObjectMapper mapper = new ObjectMapper();

public static String bean2Json(Object obj) throws IOException {

StringWriter sw = new StringWriter();

JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);

mapper.writeValue(gen, obj);

gen.close();

return sw.toString();

}

public static <T> T json2Bean(String jsonStr, Class<T> objClass)

throws JsonParseException, JsonMappingException, IOException {

return mapper.readValue(jsonStr, objClass);

}

}

常见的价格核心包:如下!

详见: http://www.yiibai.com/jackson/jackson_streaming_api.html
回顾JSON数据格式
    

在学习AJAX的过程中,接触了一种新的数据格式——Json数据格式,一开始不是很明白,后来通过做一个“股票”的小程序,有了些了解,下面是我的总结(并非"股票"例子程序),希望对大家有所帮助。


,概念

(1)一种轻量级的数据交换格式;

(2)纯文本格式,JavaScript原生支持;

,XML格式比较:

虽然Ajax的定义中有XML,但是很多应用中会选用json格式来进行数据交换;

(1)XML格式的优势:因为是javascript的原生支持,所以它在JavaScript里面去解析式非常快的,可

以迅速的把json的文本格式转换成javascript里的对象或数组,不需要用DOM,如果是XML则还需要

用DOM来解析,而DOM的操作在不同的浏览器中还是存在着一些小的差异的,并且在IE这种浏览器中DOM操作的效率也不是很好;

(2)XML格式的缺点:XML已经是很成熟的数据格式了,各种各样的应用都在使用XML,所以无论是在任

何一种服务器端语言里,都有很成熟的辅助的开源包/平台自己提供的包去操作XML的数据,去生成XML格

式的数据,但是Json,这方面的成熟度还相对较低,虽然随着Ajax技术的发展和流行,很多服务器端语言

也都有了一些开源包去来做Json格式数据的生成,但是和json相比成熟度还是很低的。

,例子

(1)简单认识



右边的Json数据格式中的内容——

中括号[]:代表数组;

大括号{}:用来定义对象;——右边json格式的数据,每个大括号{}就对应一个book对象,所以共3个book对象;
isdn、author、name、prive均是对象book的属性;

(2)小应用

如果从服务器端返回的一个json数据格式最终代表的是数组,可以直接用eval()的方式去对它进行一个执

行,返回成一个javascript数组;

如果json数据格式对应的是一个对象的话,则必须要在它的外层加上"("
")",再用eval()方法执行;

[html] view
plain copy

<html>

<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript">

function jsonTest(){

//JSON数据格式定义(Json无非就是一个数组或者一个对象)

//定义一个Json数据格式的数据,并赋值给json1

var json1="[1,2,{" +

"a:123,b:'String',c:[100,1001]" +

"}]";

var jsonArray = eval(json1);//返回一个包含3个元素的数组

alert(jsonArray[0]);//显示数组jsonArray的第1个元素

alert(jsonArray[1]);//显示jsonArray的第2个元素

alert(jsonArray[2].a);//显示jsonarray的第3个元素(是个对象)的a属性

alert(jsonArray[2].b);//显示jsonarray的第3个元素(是个对象)的b属性

alert(jsonArray[2].c);//显示jsonarray的第3个元素(是个对象)的c属性

//定义一个Json数据格式的数据,并赋值给json2

var json2="{" +

"a:'Hello',b:'[1,2,3]',c:function(){alert(\"Hi!!!\")}" +

"}";

var jsonObj=eval("("+ json2 + ")");//返回一个对象——此对象包含a、b属性和c()函数

alert(jsonObj.a);//显示jsonObj对象的属性a的值

alert(jsonObj.b);//显示jsonObj对象的属性b的值

jsonObj.c(); //调用jsonObj对象的c()函数

}

</script>

</head>

<body>

<input type="button" value="JSON示例" onclick="jsonTest()" />

</body>

</html>

IE调试窗口:看变量值



点击查看运行结果

四,总结:

(1)了解:Json数据格式是怎样一个形式;

(2)掌握:如果从服务器端接受到了Json数据后,怎么把它转换成Javascript中的数组/对象——使用eval()方法

(注:客户端使用responseText接收服务器端返回的Json数据)

(3)JSON数据格式定义(Json无非就是一个数组或者一个对象)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: