예를 들어 Java의 JSON 라이브러리 GSON의 기본 사용법을 설명합니다.
다른 json 해석 라이브러리와 json-lib;Jackson;com.alibaba.fastjson
편집자는 여전히 Google의 Gson을 좋아한다.
1. 장면 사용:
java 대상과 json 문자열의 상호 변환;로그 출력.
예:
Logger logger = Logger.getLogger(CommonAction.class);
Gson g = new Gson();
logger.info(“return:”+g.toJson(map));
2. 사용 예:1. 기초용법 toJson
toJason () 메서드는 객체를 Json 문자열로 변환합니다.
Gson gson = new Gson();
List persons = new ArrayList();
String str = gson.toJson(persons);
2. 기본 사용법: fromJson()Gson은 Json 문자열에서 자바 실체로 전환하는 방법을fromJson () 방법을 제공합니다.
예를 들어 json 문자열은 다음과 같습니다.
[{“name”:”name0”,”age”:0}]
다음을 수행합니다.
Person person = gson.fromJson(str, Person.class);
두 개의 매개 변수를 제공합니다. 각각 json 문자열과 변환할 대상의 형식입니다.3. 유니코드 전환 피하기
예를 들어 {'s':'\u003c'} 간단하게 출력하고 싶습니다. {'s':'<'} 해결 방안: HTML escaping을 비활성화하기만 하면 됩니다.Gson gson = new
GsonBuilder().disableHtmlEscaping().create();
4. 일부 필드 제외만약 하나의 클래스 A에 필드field1이 포함되어 있다면, 그 부류에도 필드field1이 포함되어 있다면, A 대상 toJson이 있을 때declares multiple JSON fieldsnamed field1이 발생합니다.해결 방안 1: 클래스 A에서 필드 filed1을 제거합니다.해결 방안 2: Json의 @Expose 메모를 사용하여 A클래스 MessageText에서 인쇄해야 하는 필드 filed1에 메모 @Expose를 추가합니다.그러면 부류에 주석이 없는field1은 배제됩니다.
Gson g = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
5. 속성 이름 바꾸기3. 사용 예:
import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
public class GSonDemo {
public static void main(String[] args) {
// Gson gson = new Gson();
//
Gson gson = new GsonBuilder().registerTypeAdapter(Timestamp.class, new TimestampTypeAdapter()).setDateFormat("yyyy-MM-dd HH:mm:ss").create();
List<Person> persons = new ArrayList<Person>();
for (int i = 0; i < 10; i++) {
Person p = new Person();
p.setName("name" + i);
p.setAge(i * 5);
p.setInsertTime(new Timestamp(System.currentTimeMillis()));
persons.add(p);
}
String str = gson.toJson(persons);
System.out.println(str);
List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
for(int i = 0; i < ps.size() ; i++)
{
Person p = ps.get(i);
System.out.println(p.toString());
}
System.out.println(new Timestamp(System.currentTimeMillis()));
}
}
class Person {
private String name;
private int age;
private Timestamp insertTime;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Timestamp getInsertTime() {
return insertTime;
}
public void setInsertTime(Timestamp insertTime) {
this.insertTime = insertTime;
}
@Override
public String toString() {
return name + "\t" + age + "\t" + insertTime;
}
}
// ,
class TimestampTypeAdapter implements JsonSerializer<Timestamp>, JsonDeserializer<Timestamp> {
public JsonElement serialize(Timestamp src, Type arg1, JsonSerializationContext arg2) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
String dateFormatAsString = format.format(new Date(src.getTime()));
return new JsonPrimitive(dateFormatAsString);
}
public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (!(json instanceof JsonPrimitive)) {
throw new JsonParseException("The date should be a string value");
}
try {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS");
Date date = (Date) format.parse(json.getAsString());
return new Timestamp(date.getTime());
} catch (Exception e) {
throw new JsonParseException(e);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.