gson 사용 강좌 - 번역 1
1. json 과 자바 대상 간 의 상호 전환 - Data Binding 방식
gson 은 json 을 자바 대상 으로 해석 하 는 두 가지 방법 을 제공 합 니 다. 이 튜 토리 얼 에서 우 리 는 범 형 을 잠시 고려 하지 않 을 것 입 니 다. 다음: - Gson 클래스 를 사용 하고, 이러한 종류의 Public T from JSon (String json, Class class of T) 방법 을 사용 합 니 다. classOFT 는 바로 당신 이 해석 하고 자 하 는 자바 대상 의 Class 대상 입 니 다. - 다른 방법 은 Gson Builder 클래스 를 사용 하 는 것 입 니 다. 이 클래스 는 특정한 특징 을 설정 할 수 있 습 니 다.예 를 들 어 null 해석 과 사용자 정의 해석 정책 을 설정 할 수 있 습 니 다. 이 종 류 를 사용 할 때 사용자 정의 특징 을 설정 한 후에 build 방법 을 통 해 Gson 대상 을 얻 을 수 있 습 니 다. 이 튜 토리 얼 에서 저 희 는 free music archive 를 예 로 들 것 입 니 다. 이 json 은 다음 과 같 습 니 다.
{
title: "Free Music Archive - Albums",
message: "",
errors: [ ],
total: "11259",
total_pages: 2252,
page: 1,
limit: "5",
dataset: [
{
...... 우선, dataset 를 무시 합 니 다. 루트 노드 에 자바 류 를 만 듭 니 다. Albums 라 고 합 니 다. 더 간결 해 보이 기 위해 서 는 Public 속성 을 사용 합 니 다. private 속성 과 getter 와 setter 를 추가 할 수도 있 습 니 다. 다음 과 같 습 니 다.
class Albums {
public String title;
public String message;
public String[] errors = new String[]{};
public String total;
public int total_pages;
public int page;
public String limit;
} 이어서 우 리 는 이 종 류 를 json 으로 해석 하여 보 았 다.
import com.google.gson.Gson;
public class JavaToJsonAndBack {
public static void main(String[] args) {
Albums albums = new Albums();
albums.title = "Free Music Archive - Albums";
albums.message = "";
albums.total = "11259";
albums.total_pages = 2252;
albums.page = 1;
albums.limit = "5";
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
System.out.println(gson.toJson(albums));
}
} 인쇄 된 결과:
{"title":"Free Music Archive - Albums","message":"","errors":[],
"total":"11259","total_pages":2252,"page":1,"limit":"5"} 주의 하 세 요. errors 라 는 배열 을 초기 화 했 기 때문에 빈 상 태 를 보 여 줍 니 다. errors 데 이 터 를 초기 화하 지 않 으 면 gs on 은 이 필드 를 무시 합 니 다. 이 경우 null 해석 을 허용 할 때 만 null 을 출력 할 수 있 습 니 다. 따라서 우 리 는 하나의 List 집합 을 사용 하여 다음 단 계 는 dataset 클래스, dataset 의 json 을 구축 하 는 것 입 니 다.보기:
dataset: [
{
album_id: "7596",
album_title: "!!! - Live @ KEXP 7/24/2010",
......
album_images: [
{
image_id: "10574",
user_id: null,
.....
}
],
tags: [ ] 이 튜 토리 얼 에서 우 리 는 'dataset' 의 기본 유형 속성 과 'album' 만 을 고려 합 니 다.images' 둘, 나머지 는 고려 하지 않 습 니 다. 둘 의 자바 류, 보 세 요:
class Dataset {
public String album_id;
public String album_title;
}
class AlbumImages {
public String image_id;
public String user_id;
} DataSet 을 json 으로 해석 합 니 다.
Dataset dataset = new Dataset();
dataset.album_id = "7596";
dataset.album_title = "Album 1";
System.out.println(gson.toJson(dataset)); 인쇄 결과:
{"album_id":"7596","album_title":"Album 1"} 앨범 이미 지 를 json 으로 해석 합 니 다.
AlbumImages image = new AlbumImages();
image.image_id = "1";
System.out.println(gson.toJson(image)); 인쇄 결과:
{"image_id":"1"} 인쇄 결 과 를 보면 할당 되 지 않 은 userid 는 인쇄 되 지 않 았 습 니 다. 여 기 는 GsonBuilder 를 사용 하여 Null 해석 을 설정 할 수 있 습 니 다. 보 세 요:
builder.serializeNulls(); Null 분석 을 설정 한 후 결 과 를 인쇄 합 니 다.
{"image_id":"1","user_id":null} 다음은 위 에 만들어 진 클래스 를 연결 해서 앨범 이미 지 를 DataSet 에 추가 합 니 다.
List<AlbumImages> images = new ArrayList<AlbumImages>(); 그리고 DataSet 을 앨범 에 추가 합 니 다.
List<Dataset> dataset = new ArrayList<Dataset>(); 그리고 코드 에 연결 하기:
dataset.images.add(image);
albums.dataset.add(dataset); 인쇄 결과:
{"title":"Free Music Archive - Albums","message":"","errors":[],"total":"11259",
"total_pages":2252,"page":1,"limit":"5",
"dataset":[{"album_id":"7596","album_title":"Album 1", "images":[{"image_id":"1","user_id":null}]}]} 이러한 결 과 는 매우 불쾌 해 보 입 니 다. 우 리 는 설정 을 통 해 인쇄 결 과 를 더욱 선명 하 게 합 니 다. (보통 테스트 에서 사용 하고 생 성 환경 은 기본 설정 을 사용 하 는 것 이 좋 습 니 다)
builder.setPrettyPrinting().serializeNulls(); 설정 한 결과:
{
"title": "Free Music Archive - Albums",
"message": "",
"errors": [],
"total": "11259",
"total_pages": 2252,
"page": 1,
"limit": "5",
"dataset": [ { "album_id": "7596", "album_title": "Album 1", "images": [ { "image_id": "1", "user_id": null } ] } ] } 지금 은 많이 좋아 졌 습 니 다. 계속 하 세 요. 제 이 슨 에서 'images' 를' album '로 표시 하려 면images ". 클래스 의 필드 이름 을 수정 할 수도 없습니다. 이 때 SerializedName 주 해 를 사용 하여 이 필드 에 별명 을 지정 할 수 있 습 니 다.
@SerializedName("album_images")
List<AlbumImages> images = new ArrayList<AlbumImages>(); 인쇄 결과 'images' 가' album '으로 바 뀌 었 습 니 다.images "라 고 했 습 니 다.
"dataset": [
{
"album_id": "7596",
"album_title": "Album 1",
"album_images": [
{
"image_id": "1",
......... 만약 당신 이 어떤 해석 에 이 별명 을 사용 하고 싶다 면, 우 리 는 코드 를 통 해 별명 을 설정 할 수 있 습 니 다. 우 리 는 먼저 Album Image 에 albumId 의 속성 을 추가 하 는 동시에 제 이 슨 에서 보고 싶 은 속성 은 "album" 입 니 다.id ", 코드 는 다음 과 같 습 니 다.
builder.setFieldNamingStrategy(new FieldNamingStrategy() {
@Override
public String translateName(Field f) {
if (f.getName().equals("albumId"))
return "album_id";
else
return f.getName();
}
}); translateName 이 방법 은 분석 과정 에서 모든 속성 을 분석 할 때 호출 됩 니 다. 우 리 는 이 방법 에서 속성 이름 이 albumId 인 속성 과 일치 하 는 속성 을 통 해 이 속성 에 'album' 이라는 이름 을 되 돌려 줍 니 다.id "의 별명 입 니 다. 인쇄 결과:
"album_images": [
{
"image_id": "1",
"user_id": null,
"album_id": "10"
} Gson Builder 는 사용자 정의 해석 옵션 을 많이 제공 합 니 다. Html 의 의 미 를 닫 고 일부 필드 (예: 모든 proctected 수식 필드 제외) 를 제외 하고 사용자 정의 형식의 변환 기 를 설정 하고 제거 정책 을 설정 할 수 있 습 니 다. 자세 한 내용 은 공식 문 서 를 볼 수 있 습 니 다.
자, 여기까지 목표 클래스 를 구 축 했 습 니 다. (빠 진 필드 는 완전 하 게 보충 해 야 합 니 다) Gson 의 from JSon 방법 을 통 해 시 작 된 json 을 앨범 대상 으로 해석 할 수 있 습 니 다. 보 세 요:
// url is the free music archive url.
Albums albums = gson.fromJson(IOUtils.toString(new URL(url)), Albums.class); 요약: 1. json 에서 자바 로 전환 하고 toJSon () 방법 2. 자바 에서 json 으로 전환 하 며 from JSon () 방법 3. builder. serializeNulls () 방법 으로 Null 해석 을 설정 합 니 다. builder. setPretty Printing () 방법 으로 인쇄 형식 을 설정 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.