Jackson解析JSON数据教程

一、JSON解析
我这里指的解析是:JSON和之间的序列化和反序列化 。
如果你的项目进行了前后端分离,那你一定使用过JSON进行数据交互,那在后端就一定会涉及到对Json数据的解析,虽然使用加上@都已经帮我们解析好并映射到bean里了,但是他底层也是通过这些JSON解析类库来完成的(默认使用的就是) 。在我们后端直接调其他服务的接口时,很多也会返回JSON数据也需要我们自己使用这些类库来进行解析 。
二、常见的JSON解析类库三、使用 1、Maven依赖引入
com.fasterxml.jackson.corejackson-databind${jackson-version}com.fasterxml.jackson.corejackson-core${jackson-version}com.fasterxml.jackson.corejackson-annotations${jackson-version}
2、基本使用 反序列化 使用,将json字符串转成对象:
String str = "{\"id\":1,\"name\":\"haha\",\"elements\":[{\"age\":1,\"elName\":\"zll\"},{\"age\":2,\"elName\":\"zll1\"}]}";ObjectMapper objectMapper = new ObjectMapper();TestBean testBean = objectMapper.readValue(str, TestBean.class);System.out.println(testBean.toString());
运行结果:
TestBean(id=1, name=haha, elements=[Element(age=1, elName=zll), Element(age=2, elName=zll1)])
使用,读取json某些字段值
String str = "{\"id\":1,\"name\":\"haha\",\"elements\":[{\"age\":1,\"elName\":\"zll\"},{\"age\":2,\"elName\":\"zll1\"}]}";ObjectMapper objectMapper = new ObjectMapper();JsonNode jsonNode = objectMapper.readTree(str);//获取name字段值JsonNode name = jsonNode.get("name");String s = name.asText();System.out.println(s);//获取elements字段下数组第二个对象的ageJsonNode elements = jsonNode.get("elements");JsonNode object2 = elements.get(1);//从0开始哦JsonNode age = object2.get("age");int i = age.asInt();System.out.println(i);
运行结果:
haha2
序列化 (将转化成JSON)
Element element = new Element();element.setAge(1);element.setElName("zll");ObjectMapper objectMapper = new ObjectMapper();String elementStr = objectMapper.writeValueAsString(element);System.out.println(elementStr);
输出结果如下:
{"age":1,"elName":"zll"}
其他常用序列化方法:
(json生成器):
可以根据自己的需要创建相应结构的json
ByteArrayOutputStream bout = new ByteArrayOutputStream();//JsonFactory jsonFactory = new JsonFactory();//创建jsonfactory 2种方法ObjectMapper objectMapper = new ObjectMapper();JsonFactory jsonFactory = objectMapper.getFactory();JsonGenerator generator = jsonFactory.createGenerator(bout);//创建自己需要的json//创建对象获取数组要写开始和结束generator.writeStartObject();//创建一个字段 第一个参数key 第二个参数valuegenerator.writeStringField("name","value");generator.writeNumberField("numberName",1);//或者直接创建objectgenerator.writeObjectField("ObjectName","ObjectValue");//创建数组generator.writeArrayFieldStart("arrayName");//里面可以是对象、数组、字符串、数字generator.writeString("element1");generator.writeNumber(1);generator.writeNumber(1);generator.writeEndArray();generator.writeEndObject();generator.flush();generator.close();String s = bout.toString();System.out.println(s);
执行结果:
{"name":"value","numberName":1,"ObjectName":"ObjectValue","arrayName":["element1",1,1]}