# gson
[JAVA] json parse(with gson) #1
요즘 open api를 보면 json 형식으로 데이터를 주고 받는 경우가 많다. 그래서 java에서 gson 라이브러리를 이용해서 json 파싱하는 방법에 대해서 알아보려고 한다. 넘어오는 json문자열의 형식에 따라서 파싱하는 방법이 다르다. 위의 간단한 json 형식을 파싱해보자. 1. JsonObject 사용 일단 제일 위의 JsonElement를 사용하여 문자열을 파싱하여 객체를 만든다. 그리고 getAsJsonObject()를 이용하여 JsonObject로 타입 변환을 한다. 출력문 안에 보면 JsongObject는 get("key")를 이용하여 데이터를 읽어올 수 있다. 이 때 들어오는 데이터가 String이라면 getAsString, int라면 getAsInt를 사용한다. 나중에 자세히 보겠지만 key에 대응하는 데이터가 json형식인 경우가 있다. 이럴 땐 getAsJsonObject()를 사용하여 JsonObject 타입으로 읽어오면 된다. 2

Gson에 대하여.alaboza
Gson이란? Gson은 Google에서 개발한 Java 라이브러리로, 자바 객체를 Json 데이터로 변환하거나, 반대로 Json 데이터를 자바 객체로 변환하는 작업을 간편하게 처리할 수 있도록 도와준다. Gson을 프로젝트에서 사용하려면, Gson 라이브러리의 의존성을 프로젝트에 추가해야 한다. Maven이나 Gradle같은 프로젝트 빌드 도구를 통한 의존성 관리로 Gson을 프로젝트에 추가할 수 있다. >Gradle Maven JVM 기반 언어면 사용 가능하므로, Java뿐만 아니라 Kotlin에서도 사용할 수 있다. 다만 이 경우 사용할 클래스를 Java클래스 형식으로 변환해야 한다. >Kotlin 기반 예시 객체 -> Json 객체 내부의 변수와 그 값을 Json의 Key와 Value데이터로 변환하는 것을 직렬화라고 한다. 사용하는 함수는
패스트캠퍼스X야놀자: 여행 여정을 기록과 관리하는 SNS 서비스 1단계
Entity > Entity = Table과 1:1 매핑되는 객체 > JPA가 동작하기 위해서는 default 생성자가 필요하다. > 무의미한 객체의 생성을 방지하기 위해 protected로 선언하자. > 그럼 객체는 어떻게 생성할까. Builder를 사용하면 된다. > 생성자를 만들고, 그 위에 @Builder어노테이션을 붙이면 생성자의 파라미터를 이용해서 lombok이 Builder를 만들어준다. > setter를 지양한다. > 영속성 컨텍스트에서 관리되고 있을 때 setter가 호출되면 update문이 실행되기 때문에 무분별한 setter사용을 방지하기 위함이다. >> 따라서 update를 원하는 경우에는 의미있는 메서드를 생성해서 해결하는 것이 좋다. 예시) Repository 
[java] JSON과 GSON
⚡ JSON과 GSON 📌 JSON 🔷 JavaScript Object Notation 자바스크립트를 토대로 개발 여러 프로그래밍 언어에서 사용할 수 있는 독립형 언어 웹 클라이언트와 웹 서버 간 데이터 교환에 사용 웹 브라우저 비동기 처리에 사용되는 AJAX의 데이터 교환 형식으로 널리 알려짐 IETF RFC 7159, ECMA-404 표준으로 제정 🔷 왜 JSON인가? 주요 프론트엔드 프레임워크에 의해서 지원된다. 공식 포맷이기 때문에 개발자 사이에 데이터 통신을 할 수 있다. 텍스트로 이루어져 있어 읽고 쓰기 쉽다. XML에 비해 용량이 적고 이해하기 쉽다. 언어와 플랫폼에 독립적이므로, 서로 다른 시스템 간 데이터 교환에 좋다. ⭐ JSON 구조와 변환 🔷 JSON은 key, value의 쌍으로 표현한다. 🔷 **value
LocalDate Gson, jackson
Gson Gson 라이브러리를 사용해서 json을 파싱할 때 LocalDate가 이상하게 보였다 이런식으로 가져와 졌지만 이런식으로 사용하고 싶었다. 그래서 Gson을 사용할 때 해결방법은 LocalDate객체를 JSON형식으로 직렬/역직렬화 하기 위한 클래스를 만들었다. 이렇게 클래스를 만들어 주고 이렇게 사용해주면 된다. setObjectToNumberStrategy(ToNumberPolicy.LONGORDOUBLE) -> 숫자로 변환될 객체가 long 또는 double 타입으로 변환될 수 있을 때 해당 타입으로 변환 시킨다. -> 숫자로 변환될 객체가 정수형이거나 실수형으로 안전하게 변환될 수 있는 경우 최대한 정확한 타입으로 변환하는 것을 의미한다. 이거 사용안하면 숫자뒤에 자꾸 .0 같은 소수점이 붙는다 setPrettyPrinting() JSON 데이터를 보기 좋게 정렬하고 들여쓰기하는 기능을 설정하는 메서드다.

[Java] Json을 Java 객체로 변환하는 방법(Gson, Jackson, JSON-SIMPLE)
정리하게 된 배경 TMI~ API를 사용하게 되면 많이 다루게 되는 데이터 형식 중 하나가 바로 json이다. 개발중인 서비스에서도 연계된 타 서비스의 데이터를 API로 받아오게 되는데, 대용량일 시 json 문자열을 Entity 객체로 파싱하며 성능 이슈가 있는 듯하여 현재 사용중인 라이브러리와 그 외에 대중적으로 사용되는 라이브러리의 성능 차이를 검토하게 되었다. JSON 라이브러리 종류 > JAVA - GSON , JSON-Simple, Jackson 무엇을 사용해야 할까? GSON Jackson JSON-SIMPLE 고코더님이 작성한 포스트에서 대용량에서는 Jackson이 저용량에서는 GSON이 가장 성능이 좋았다는 평이 있다. 현 프로젝트에서는 GSON을 사용하고 있는데, 우리는 큰 파일과 작은 파일을 모두 다루고 있어서 라이브러리 선택이 잘못됐다는 것을 깨달았다. 그냥 JSO

[JAVA] Gson 라이브러리 사용법 및 예제
😎 Gson이란? Gson은 json을 파싱하고 생성하기 위해 사용하는 구글에서 개발한 오픈소스입니다 java object를 Json 문자열로 변환할수 있습니다 😎 Gson 의존성 추가 gson을 사용하기 위해서는 gson 의존성을 추가해줘야 합니다 😎 Gson 객체 생성 Gson 객체를 생성하는 방법은 2가지가 있습니다. 2가지 방법으로 객체를 선언 할수 있습니다 😎 json -> string 으로 변환 toJson 메소드를 통해 JsonObject를 string으로 변환할수 있습니다 😎 object -> json 으로 변환 Customer 오브젝트 생성 Cusomer 오브젝트 json으로 변환 toJson 메소드를 통해 Object객체를 json으로 변환할수 있습니다 😎 json -> object 으로 변환 Customer 오브젝트 생성 json -> o

Mockito 기반의 Controller 단위 테스트
Mockito 기반의 Controller 단위 테스트 Mockito 어노테이션 종류 @Mock 가짜 객체를 만들어주는 어노테이션 테스트할 레이어에 필요한 객체를 사용 @Spy 특정 객체의 실제 메소드를 호출 @InjectMocks Mock 객체가 주입되어야 하는 대상 객체 생성 및 주입 Mockito 메서드 doReturn() 가짜 객체가 특정한 값을 반환하는 경우 doNothing() 가짜 객체가 아무 것도 반환하지 않는 경우 void인 경우 doThrow() 가짜 객체가 예외를 발생하는 경우 단위 테스트 작성 의존성 주입 및 HTTP 호출을 위한 MockMVC @InjectMocks 테스트 대상 가짜 객체 주입 Controller @Mock 가짜 객체 생성 Service -

JSP 강의 Day07
Api 준비단계 pom.xml pom.xml에 gson코드를 추가하고 restcontroller 생성 restcontroller 패키지를 생성하여 컨트롤러를 만든다. RestBoardController.java이다. 주석으로 각 줄의 설명을 적어두었다. postman 설치 및 세팅 오늘은 postman을 사용할 것이다. Postman 이란? API 개발을 빠르고 쉽게, 개발된 API 테스트 팀원들간 공유 기능 API를 만들수도, 공유할수도, 테스트에 문서화까지 가능하며, API로 리퀘스트해서 나오는 응답까지 확인할 수 있는 툴 [postman 다운로드](https://www.postman.com/downloads/?utm_so
Gson
* Java 객체를 Javascript 객체로 변환하여 응답(출력) * Java 객체 -> Javascript 객체 형태의 문자열(JSON) -> Javascript 객체 1) JSON 직접 작성 -> 오타 너무 난다.. 2) JSON-simple 라이브러리에서 제공하는 JSONObject 사용 3) GSON 라이브러리를 이용한 Java 객체 -> JSON 객체 new Gson().toJson(객체, 응답 스트림); -> 매개변수에 작성된 객체를 JSON 형태로 변환한 후 스트림을 통해서 출력 >### new Gson().toJson(member, resp.getWriter()); (Servlet부분)
날씨 앱 만들기 [No.1]
1.초기 설정 1-1. AndroidManifest.xml 인터넷 사용 설정 AndroidManifest.xml에 가서 인터넷 사용 권한을 추가해줘야 합니다. 1-2. build.gradle(:app) ViewBinding,gson.glide,retrofit 사용 설정 Bundle.gradle(Module.app)에서 위의 기능들을 사용하기 위한 설정들을 해줍니다. viewbinding 설정 gson,glide,retrofit 😉위의 코드는 딱히 이해를 요구하지는 않으니 컴퓨터에서 환경 설정한다고 생각하고 따라치시면 됩니다.😉 Model 생성 REST API를 통해서 받아온 데이터를 사용하기 쉽도록 reponse되는 데이터에 맞게 구현한 Weather Class 입니다. API 를 통해서 받아오는 데이터는 JSON형태이고, 우리는 이를 GSON 오픈 소스 라이브러리를

날씨 앱 만들기 [프롤로그]
😄제작 계기😄 2023년 하반기 취업을 준비하면서 안드로이드를 공부하던 와중이었다. RecyclerView, listView, Fragment등등 을 공부하다가 문득 불안감이 엄습해왔다. 이 모든게 다 시간낭비라면? 지금 저런 간단한 것들을 공부한다고 해서 당장 앱을 만들지 못한다면 무슨 의미가 있지? 저 고민이 시작되자 마음이 조급해졌다. 뭐라도 만들어야 했다. 지금 낭게는 소프트웨어 복수전공자, 토익 920, 오픽 IM2, 공군 만기 전역(?)이라는 초라한 스펙이라고 하기도 힘든 이력을 가지고 있었기 때문이다. 처음엔 영화를 좋아하니 영화 관련 추천,리뷰앱을 만들고 싶었다. 그러다가 난관에 봉착했다. 🤮서비스를 초짜가 처음부터 만들기는 쉽지않다.🤮 처음 로그인 화면과 어느정도 영화를 보여주는 UI까지는 구현이 됬다. 그그러나 거기까지였다. 서버에서 데이터를 가져와서 내가 원하는 방식으로 보여줘야 했는데 그때부터 알 수 없는 용어들이 쏟아지기

JSON?? GSON??
JSON이란? 우리가 안드로이드 개발을 접하다 보면 json이란 녀석을 보게 된다. JSON : JavaScript Object Notation 우리가 서버-클라이언트간 데이터를 교환 할때 사용하는 데이터의 포맷(format)으로, key- value의 형식으로 이루어져있다. 이해가 좀 더 쉬우려면 server - client는 주로 API를 사용해서 데이터를 교환하는데, 이때의 데이터 형식을 JSON이라고 한다. GSON이란? 우리는 서버에서 이러한 형태의 데이터를 받아서 사용해야 한다. 만일 우리가 java를 사용해서 개발을 하고 있다면 java object(객체)로 바꿔줘야 한다. 그 역할을 해주는 것이 바로 gson이다. json -> java object로 변
GsonConverterFactory 와 Kotlin Serialization Converter 같이 쓰기
같이쓰게 된 배경.. 우선 회사에서 api 통신시 null 값이 오는 부분들이 좀 있었고 null로 인해 굉장히 불필요한 코드들이 적히는 것이 싫었다.. 우선 null 체크같은 것들 이런 것들이 기본적으로 보일러 플레이트가 되었다. 또한 이제 Gson도 잘 안쓰고 Moshi를 더 쓴다는 것을 알았고,, 이 Gson 을 이제 어떻게 할까 고민을 하는 계기가 되었다. 고민을 하는 도중 Kotlin Serialization 이 있는 것을 알게되었고, 성능도 Gson 보다 좋고 나쁘지 않은 것 같아 이를 적용해보았다. Gson의 단점?.. 우선 retrofit의 컨버터를 GsonConverterFactory를 사용하는 경우를 예로 들면 우리가 만약 데이터 클래스를 아래와 같이 구현하고, 서버에서 응답 데이터가 아래와 같이 왔다면 ServerResponseData클래스에서 default value를 설정했더라도 description은 null 값이 된다. 이런 상

gson을 활용하여 디렉토리구조 Json형식으로 출력하기
개요 문득 시간나는 김에 특정 Tree구조를 Json형식으로 parsing하는 유틸을 만들고 싶어졌다. 기본적으로 JsonObject를 사용한 트리구조 출력방식은 다음과 같다. Gson? Gson(구글 Gson, Google Gson)은 JSON의 자바 오브젝트의 직렬화, 역직렬화를 해주는 오픈 소스 자바 라이브러리이다. 출처 : https://ko.wikipedia.org/wiki/Gson 데이터 넣기 1. property가 일반적인값을 갖는 경우 ex) { data : 1 } 또는 { data : 'hello' } 의 형식을 의미한다. 이 때는 addProperty(String key, Type value)를 사용한다. Type에는 String, Boolean, Number, Character가 올 수 있다. 2. property가 Array일 경우 ex) { data : [1, 2, ...] } 의 형식을 의미한다. 기본적으로 대상이되

[Gson] Gson.fromJson(Object) Empty String / TypeCasting 처리하기
코딩하게 된 배경과 삽질 스토리 TMI~ 업무를 하다가 API에서 받아온 데이터를 그대로 DB 테이블에 Merge해야하는 케이스가 생겼다. 처음에는 적재해야 하는 Entity의 모든 필드를 String 타입으로 선언하고, Gson을 이용해 json 문자열을 바로 List로 변환해주는 것 까지 완료했다. 이때까지 단위테스트 결과는 전혀 문제가 없어서 순조롭게 진행되는 구나 했는데, 아뿔싸. mybatis로 쿼리를 실행하니 빈 문자열("")로 들어온 필드의 DB 자료형이 decimal이거나 double일 때 형식이 맞지 않아 에러가 발생했다. 그래서 Entity에서 DB의 자료형에 맞게 선언을 바꿔줬더니 이번엔 Gson에서 List로 변환하면서 NumberFormatException이 발생한다. 열심히 AttributeConverter를 구현하여 JPA @Converter 를 지정해줬는데도 제대로 작동하지 않았다. 회사
Gson 사용 문제 feat. Date Format in TestCode
Gson DateFormatting Error > Spring Jnit Test 를 할 때 데이터 수정 , 삽입 등은 json 형식으로 데이터를 보내야 한다. 그런데 json 형식으로 보낼 때 날짜 형식을 지정해주지 않으면 에러가 발생한다. ObjectMapper 를 사용하면 이런 문제는 없지만 매번 그 귀찮은 ObjectMapper 를 사용하기에는 불편하다. contentType 을 지정해주는 것도 귀찮다. 그래서 보통 Gson 을 사용 하곤 하기도 하고 Dto 에서 아래와 같이 DateType 을 String 으로 받는 경우도 많이 봤다. 그러나 이런 식으로 받으면 한 번 더 내부에서 Date 형식으로 변환을 해줘야 한다. 사실 일반적으로 Client에서 줄 때 Date 형식 객체로 만들어서 json 으로 주고 브라우저는 ISO 형식이 기본이기 때문에 포맷팅 에러가 없지만 **Gson 은 기본적인 형식이 ISO 가 아니라서

바보같은 gson에게 LocalDate나 LocalDateTime 알려주기
문제 상황 gson이 LocalDate와 LocalDateTime을 알아듣지 못하여 config를 통과하며 400 에러를 냈다. 문제 해결 gson이 LocalDate와 LocalDateTime을 알아들을 수 있도록 직렬화와 역직렬화를 구현했다. gson에 아래 구현할 녀석들 알려주기 LocalDate Serializer & Deserializer LocalDateTime Serializer & Deserializer LocalDateTime의 경우 Field명에 JsonFormat을 정의해줘야 gson에서도 알아먹는다. 위의 코드로 Test Code 작성 중 현재 시간을 받아올 때 second 단위 아래로 인해서 오류가 발생하는데 아래의 코드로 second 단위 아래를 제거할 수 있다.

Retrofit2을 이용해 안드로이드 스튜디오에 서버의 데이터를 가져오기
✔️나는 MySql과 spring을 연동하여 Mysql의 데이터를 tomcat 서버에 데이터를 Json 형식으로 올려두었다. ✔️서버에 올려둔 Json 형식의 데이터를 안드로이드 스튜디오에 가져오고자 한다. > ### 우리가 필요한 것? 1. Retrofit Retrofit은 서버와 클라이언트 간 http 통신을 위한 라이브러리로, API 인터페이스가 호출가능한 객체로 변환해주는 클래스를 제공한다. https://square.github.io/retrofit/ 2. Gson Gson은 json구조를 띄는 직렬화된 데이터를 JAVA의 객체로 역직렬화, 직렬화를 해주는 java 라이브러리 이다. 즉 Json Object JAVA Object 양방향 변환을 해주는 라이브러리이다. 0. 준비단계 > ① manifest.xml 설정 ② build.gradle(Module) 설정 ① manifest

[SpringBoot]결제, 아임포트 문제 해결 과정 (2)
문제 정의 Axios post방식을 통해 넘어온 데이터를 2개의 테이블에 저장해야하는 상황. (결제 내역, 예매 내역) json 형식으로 넘어오는 json 데이터 객체를 서버에서 데이터를 어떻게 처리할지 고안 필요. 조건 jsonArray가 아닌 jsonObject로 요청. 데이터를 담는 객체인 DTO(Vo)를 새로 만들지 않고 기본 테이블을 활용. > 위 조건으로 진행하는 이유는 기존 자주 사용하던 방식을 탈피한 새로운 방식으로 데이터 처리를 해보고자 제약을 두었습니다. 문제 해결 절차 front에서 아임포트를 통해 결제를 성공 후 결제내역과 예매내역을 json 형태로 만들어 데이터 저장을 요청. 여러가