jackson 복잡한 json 문제 해석
22781 단어 json
jackson에서 흔히 볼 수 있는 json 생성과 해석 도구 패키지입니다. 복잡한 json 해석에 대한 문제점을 살펴보겠습니다.
잭슨은 일종의 JSON API이자 가장 유행하고 속도가 가장 빠른 JSON API이다.잭슨의 온라인 API 문서는http://wiki.fasterxml.com/JacksonInFiveMinutes구문을 사용합니다.잭슨의 소스 코드 관리:https://github.com/FasterXML/jackson. 잭슨은 두 가지 다른 JSON 해상도를 제공했다. ObjectMapper: JSON을 사용자 정의 자바 클래스로 해석하거나 잭슨이 지정한 트리 구조로 해석한다. (Tree 모델)잭슨 Json Parser: 매번 JSON 데이터 그룹을 분석하는 '풀(pull) 해상도잭슨도 두 가지 다른 JSON 생성기를 포함한다. ObjectMapper: 사용자 정의 자바 클래스나 잭슨이 지정한 트리 구조를 JSON 파일로 만든다.잭슨 JsonGenerator: 매번 한 그룹의 JSON 데이터만 생성합니다.
jackson 의존 패키지
잭슨은 코어 JAR 하나와 코어 JAR에 의존하는 두 개의 JAR을 포함한다. 잭슨 코어, 잭슨 앤노테이션, 잭슨 앤노테이션, 잭슨 앤노테이션.이 세 개의 JAR은 Maven 중앙 창고에서 다운로드한 다음 CLASSPATH에 놓을 수도 있고 Maven 설정으로 할 수도 있다.
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>${jackson-version}version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>${jackson-version}version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>${jackson-version}version>
dependency>
jackson 해석 javaBean
ProductBean.java
package cn.com.zckj;
/**
*
* @ClassName: ProductBean
* @Description:
* @author deng
* @date 2017 4 27 3:38:26
*/
public class ProductBean {
//
private int id;
//
private String name;
// jiage
private int price;
public ProductBean() {
super();
}
public ProductBean(int id, String name, int price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 " id:" + id + ", :" + name + ", :" + price ;
}
}
해석은 다음과 같습니다.
package cn.com.zckj;
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
*
* @ClassName: Demo4
* @Description: TODO( )
* @author deng
* @date 2018 4 17 11:38:13
*Jackson
*
*/
public class Demo4 {
public static void main(String[] args) {
// -》 json
//ProductBean productBean=new ProductBean(1, "aa", 222);
ObjectMapper mapper = new ObjectMapper();
try {
mapper.writeValue(new File("data.txt"), productBean);
} catch (IOException e) {
e.printStackTrace();
}
//json - >
try {
ProductBean productBean2 = mapper.readValue(new File("data.txt"), ProductBean.class);
System.out.println(productBean2);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Jackson 해석 List
package cn.com.zckj;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
*
* @ClassName: Demo5
* @Description: TODO( )
* @author deng
* @date 2018 4 18 10:51:23
*
* jackson list
*/
public class Demo5 {
public static void main(String[] args) {
ArrayList productBeans = new ArrayList();
productBeans.add(new ProductBean(1, "a", 22));
productBeans.add(new ProductBean(2, "b", 22));
productBeans.add(new ProductBean(3, "c", 22));
ObjectMapper mapper = new ObjectMapper();
try {
mapper.writeValue(new File("data.txt"), productBeans);
} catch (IOException e) {
e.printStackTrace();
}
// ArrayList == javaType
JavaType javaType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, ProductBean.class);
try {
List lst = (List)mapper.readValue(new File("data.txt"), javaType);
for(ProductBean productBean : lst){
System.out.println(productBean);
}
} catch (IOException e) {
e.printStackTrace();
}
//
try {
List lst = mapper.readValue(new File("data.txt"), ArrayList.class);
for(ProductBean productBean : lst){
System.out.println(productBean);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
jackson 복잡한 json 해석
ResultBean.java
package cn.com.zzkj;
import java.util.ArrayList;
/**
*
* @ClassName: ResultBean
* @Description: TODO( )
* @author deng
* @date 2018 4 19 6:29:18
*/
public class ResultBean {
private String code;
private ArrayList data;
public ResultBean() {
super();
// TODO Auto-generated constructor stub
}
public ResultBean(String code, ArrayList data) {
super();
this.code = code;
this.data = data;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public ArrayList getData() {
return data;
}
public void setData(ArrayList data) {
this.data = data;
}
@Override
public String toString() {
return "ResultBean [code=" + code + ", data=" + data + "]";
}
}
해석 방식
package cn.com.zzkj;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
ArrayList data = new ArrayList();
data.add(new ProductBean(2, " ", 2));
data.add(new ProductBean(2, " ", 2));
data.add(new ProductBean(2, " ", 2));
ResultBean resultBean =new ResultBean("11",data);
try {
objectMapper.writeValue(new File("aa.txt"), resultBean);
} catch (IOException e) {
e.printStackTrace();
}
// 1. bean json 。2. bean json
try {
ResultBean resultBean2 = JackSonUtil.parse(ResultBean.class, new FileInputStream(new File("aa.txt")));
ArrayList a = resultBean2.getData();
for(ProductBean productBean : a){
System.out.println(productBean);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
의지하다
jackson-annotations-2.5.0.jar
jackson-core-2.5.0.jar
jackson-core-asl-1.9.11.jar
jackson-databind-2.5.0.jar
jackson-mapper-asl-1.9.11.jar
stax2-api-3.1.1.jar
jar 패키지 및 JackSonUtil 도구 클래스 JackSonUtil.java
package cn.com.zzkj;
import java.io.IOException;
import java.io.InputStream;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
/**
*
* @since 2014/10/25 18:33
* @version 1.0 1. bean json 。2. bean json
*
*/
public class JackSonUtil {
/**
* @param clazz
* bean bean Serializable
* @param is
* json
* @return bean : Djl p = JackSonUtil.parse(Djl.class, is);
*/
public static T parse(Class clazz, InputStream is) {
ObjectMapper mapper = new ObjectMapper().setVisibility(
JsonMethod.FIELD, Visibility.ANY);
T result = null;
try {
/**
* true
*/
mapper.configure(
DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
true);
/**
*
*/
mapper.configure(
DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
result = mapper.readValue(is, clazz);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* @param clazz
* bean bean Serializable
* @param json
* json
* @return bean : Djl p = JackSonUtil.parse(Djl.class, is);
*/
public static T parse(Class clazz, String json) {
ObjectMapper mapper = new ObjectMapper().setVisibility(
JsonMethod.FIELD, Visibility.ANY);
T result = null;
try {
/**
* true
*/
mapper.configure(
DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
true);
/**
*
*/
mapper.configure(
DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
result = mapper.readValue(json, clazz);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
이런 방식이 있으면 어떤 복잡한 json도 해석할 수 있지만 주의해야 할 것은 다음과 같다.실체 bean의 구조는 json의 데이터 구조와 같아야 한다.2. 실체 bean의 데이터 명칭은 json에 대응하는 키워드와 일치해야 합니다. 행운을 빕니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘텐츠 SaaS | JSON 스키마 양식 빌더Bloomreach Content를 위한 JSON Form Builder 맞춤형 통합을 개발합니다. 최근 Bloomreach Content SaaS는 내장 앱 프레임워크를 사용하여 혁신적인 콘텐츠 유형 필드를 구축할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.