반응형

# JSON API 활용  (JSON-Java)

## JSON-Java API 다운로드 및 적용방법. (mvnrepository, Build Path)

 

Maven Repository: org.json » json

JSON is a light-weight, language independent, data interchange format. See http://www.JSON.org/ The files in this package implement JSON encoders/decoders in Java. It also includes the capability to convert between JSON and XML, HTTP headers, Cookies, and

mvnrepository.com

  • 다운로드 받은 jar 파일의 경우 별도의 공간(C:\JavaTPC\lib 등..) 에 저장 후 아래와 같이 설정 진행. 
  1. 프로젝트 우 클릭 Build Path > configure Build Path 클릭.
  2. Libraries > Add External JARs 클릭하여 저장한 jar 파일 추가. (자바가 12버전 이상인 경우 Modulepath(자바모듈) 와 Classpath(외부 API 모듈)로 나누어 표시(관리)되어 있어서 Classpath에 추가해주면 되는데, 자바가 그 이전 버전인 경우에는 Add ExternalJARs 해서 바로 추가해주면 됨) 
  3. 완료 후 아래와 같이 Referenced Libraries에 해당 API가 추가되어있는지 확인, 사용 시에는 import 하여 사용하면 된다.

## JSON-Jave API 사용.

1. JSONObject

  • JSONObject 사용
  • JSONObject로 별도의 객체 생성없이 JSON 구조 생성.
import org.json.JSONObject;

public class Project01_B {
	public static void main(String[] args) {
		// JSON-Java(org.json)
		JSONObject student = new JSONObject();
		student.put("name", "김철수");
		student.put("age", 25);
		student.put("phone", "010-1234-1234");
		student.put("address", "세종시 소담동");

		System.out.println(student);
	}
}
  • 출력 결과.
{"address":"세종시 소담동","phone":"010-1234-1234","name":"김철수","age":25}

2. JSONArray

JSONObject, JSONArray 사용.

JSONObject로 객체 생성 후 JSONArray에 담기.

import org.json.JSONArray;
import org.json.JSONObject;

public class Project01_B {
	public static void main(String[] args) {
		// JSON-Java(org.json)
		JSONArray students = new JSONArray();
		
		JSONObject student = new JSONObject();
		student.put("name", "김철수");
		student.put("age", 25);
		student.put("phone", "010-1234-1234");
		student.put("address", "세종시 소담동");

		students.put(student);
		
		System.out.println(student);
		
		student = new JSONObject();
		student.put("name", "신짱구");
		student.put("age", 25);
		student.put("phone", "010-4321-4321");
		student.put("address", "세종시 대평동");

		students.put(student);
		
		System.out.println(student);
		
		JSONObject object = new JSONObject();
		object.put("students", students);
		
		System.out.println(object.toString(2));	
		
	}
}
  • 출력 결과.
{"address":"세종시 소담동","phone":"010-1234-1234","name":"김철수","age":25}
{"address":"세종시 대평동","phone":"010-4321-4321","name":"신짱구","age":25}
{"students": [
  {
    "address": "세종시 소담동",
    "phone": "010-1234-1234",
    "name": "김철수",
    "age": 25
  },
  {
    "address": "세종시 대평동",
    "phone": "010-4321-4321",
    "name": "신짱구",
    "age": 25
  }
]}

3. JSONTokener

  • InputStream JSONTokener, JSONObject, JSONArray 사용
  • InputStream 으로 info.json 파일의 데이터를 읽어와서, JSONTokener로 읽어온 문자열을 JSON으로 변환, JSONObject로 JSON을 JSONObject 로 변환, 변환된 JSONObject를 JSONArray에 담고, 담긴 내역 출력.

  • info.json
{"students": [
  {
    "address": "세종시 소담동",
    "phone": "010-1234-1234",
    "name": "김철수",
    "age": 25
  },
  {
    "address": "세종시 대평동",
    "phone": "010-4321-4321",
    "name": "신짱구",
    "age": 25
  }
]}
import java.io.InputStream;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

public class Project01_C {
	public static void main(String[] args) {
		
		String src = "info.json";
		
		// file에서 데이터 읽어오기. 
		// IO -> Stream (스트림)
		InputStream is = Project01_C.class.getResourceAsStream(src);
		
		if (is == null) {	// 파일이 없는 경우.
			throw new NullPointerException("Can't find resource file");
		}
		
		// file에서 가져온 문자열 -> JSON 객체로 변환.
		JSONTokener tokener = new JSONTokener(is);
		
		// JSON -> JSONObject 변환.
		JSONObject object = new JSONObject(tokener);
		
		JSONArray students = object.getJSONArray("students");
		
		for (int i = 0; i < students.length(); i++) {
			JSONObject student = (JSONObject) students.get(i);	// JSONObject로 객체 받기.
			System.out.println(student.get("name") + "\t" + student.get("age") + "\t" + student.get("address") + "\t" + student.get("phone"));
		}
	}
}
  • 출력결과
김철수	25	세종시 소담동	010-1234-1234
신짱구	25	세종시 대평동	010-4321-4321
반응형
반응형

# JSON API 활용 (Gson)

  • 오픈 API, 공공 API 등에서 클라이언트에게 전달하는 자료 형태가 JSON인 경우가 대부분임.

## Gson API 다운로드 및 적용방법. (mvnrepository, Build Path)

 

Maven Repository: Gson

Feign Gson Last Release on Dec 23, 2021

mvnrepository.com

  1. jar 파일로 API 다운로드 받은 경우 lib 폴더 등에 jar 파일 저장.
  2. 프로젝트 우 클릭 Build Path > configure Build Path 클릭.
  3. Libraries > Add External JARs 클릭하여 저장한 jar 파일 추가. (자바가 12버전 이상인 경우 Modulepath(자바모듈) 와 Classpath(외부 API 모듈)로 나누어 표시(관리)되어 있어서 Classpath에 추가해주면 되는데, 자바가 그 이전 버전인 경우에는 Add ExternalJARs 해서 바로 추가해주면 됨) 
  4. 완료 후 아래와 같이 Referenced Libraries에 해당 API가 추가되어있는지 확인, 사용 시에는 import 하여 사용하면 된다.

## Gson API 사용.

  • 아래와 같이 import 하여 사용 가능.
import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import kr.inflearn.BookDTO;

public class Project01_A {
	public static void main(String[] args) {
		// 1. 객체 -> 문자열 (Object(BookDTO) -> JSON(String))
		BookDTO book = new BookDTO("갓바", 250000, "출판사A", 300);
		
		Gson g = new Gson();
		String json = g.toJson(book);
		System.out.println(json);	// {"title":"갓바","price":250000,"company":"출판사A","page":300}

		// 2. 문자열 -> 객체 (JSON(String) -> Object(BookDTO))
		BookDTO book1 = g.fromJson(json, BookDTO.class);
		System.out.println(book1);	// BookDTO [title=갓바, price=250000, company=출판사A, page=300]
		System.out.println(book1.getTitle() + "\t" + book1.getPrice() + "\t" + book1.getCompany() + "\t" + book1.getPage());	// 갓바	250000	출판사A	300
		
		// 3. Object(List<BookDTO>) -> JSON(String) : [{ }, { }, ...] 형태.
		List<BookDTO> list = new ArrayList<BookDTO>();
		list.add(new BookDTO("갓바", 250000, "출판사A", 300));
		list.add(new BookDTO("파이썬", 50000, "출판사B", 150));
		list.add(new BookDTO("노드", 100000, "출판사C", 400));
		
		String listJson = g.toJson(list);
		System.out.println(listJson);	// [{"title":"갓바","price":250000,"company":"출판사A","page":300},{"title":"파이썬","price":50000,"company":"출판사B","page":150},{"title":"노드","price":100000,"company":"출판사C","page":400}]
		
		// 4. JSON(String) -> Object(List<BookDTO>)
		List<BookDTO> list2 = g.fromJson(listJson, new TypeToken<List<BookDTO>>(){}.getType());
		for(BookDTO vo : list2) {
			System.out.println(vo.toString());
			// BookDTO [title=갓바, price=250000, company=출판사A, page=300]
			// BookDTO [title=파이썬, price=50000, company=출판사B, page=150]
			// BookDTO [title=노드, price=100000, company=출판사C, page=400]
		}
		
	}
}

 

 

# JSON API 활용 (JSON-Java(org.json))

## JSONObject, JSONArray

  • JSONObject : {  } 형태, 하나의 객체를 표현. (key : value)
{
	"address" : "대전",
	"phone" : "010-1234-1234",
	"name" : "둘리"
}
  • JSONArray : [  ] 형태
[
	{
		"address" : "대전",
		"phone" : "010-1234-1234",
		"name" : "둘리"
	} ,
	{
		"address" : "세종",
		"phone" : "010-4321-4321",
		"name" : "뽀로로"
	}
]
  • 아래와 같이 JSONObject로 표현 가능.
{ "students" : [
	{
		"address" : "대전",
		"phone" : "010-1234-1234",
		"name" : "둘리"
	} ,
	{
		"address" : "세종",
		"phone" : "010-4321-4321",
		"name" : "뽀로로"
	}
] }
  • JSONObject 아래와 같이 사용 가능.
JSONObject student = new JSONObject();
student.put("name", "강아지");
student.put("address", "청주");
student.put("phone", "010-1234-1234");


// key를 이용해서 출력 가능.
System.out.println(student.get("name"));
System.out.println(student.get("address"));
System.out.println(student.get("phone"));

## JSON Data 분석

 

JSON Editor Online: JSON editor, JSON formatter, query JSON

You need to enable JavaScript to run this app. News Export to CSV 2022-06-07 A useful new feature: you can now export your JSON to CSV via menu "Save", "Export to CSV". A typical use case is to load your JSON data into JSON Editor Online and preprocess it

jsoneditoronline.org

반응형
반응형

# 객체 표현 (JSON)

  • 이기종 시스템 간에 데이터를 주고 받을 때 사용.
  • 쉽게 데이터를 주고 받을 수 있는 방법에는 객체를 문자열의 형태로 주고 받는 방법이다.

## 2명의 회원정보를 표현하고자 할때,아래와 같이 표현 가능.

1. 의미 없고, 구분이 있는 문자형 형태 : 단순하지만 데이터 처리의 어려움

String textMember = "홍하나, 서울, 010-123-1234#홍둘이, 경기도, 010-123-1235";

2. 의미 있고, 구분 있는 문자열 형태 (XML == 일종의 Tag) : 데이터 처리는 쉽지만, 데이터 크기가 커진다. (각 프로그램 마다 XML을 핸들링 할 수 있는 API 존재, API를 바탕으로 XML 데이터를 로딩하여 Tag를 찾아 데이터 추출(파싱))

String xmlMember = "<sembers> +
	"<member>" + 
		"<name>홍하나</name>" +
		"<address>서울</address>" +
		"<phone>010-123-1234</phone>" +
	"</member>" +
	"<member>" + 
		"<name>홍둘이</name>" +
		"<address>경기도</address>" +
		"<phone>010-123-1235</phone>" +
	"</member>" +
	"</members>";

3. 의미 있고, 구분 있는 문자열 형태 (JSON) : 데이터 크기는 작아지나, 표현이 제한적이다. (데이터 표현이 가벼워 웹에서 많이 사용. 각 프로그램 마다 JSON을 핸들링 할 수 있는 API 존재(Gson, JSON-Java 등))

String jsonMember = "[{'name' : '홍하나', 'address' : '서울', 'phone' : '010-123-1234'}," +
{'name' : '홍둘이', 'address' : '경기도', 'phone' : '010-123-1235'}]"

## JSON (JavaScript Object Notation)

  • 플랫폼이나 언어와 무관하게 자료 교환을 목적으로 만들어진 포맷.
  • key-value 쌍으로 이루어짐.
[{key : value, key : value, ... }, {key : value, key : value, ...}, ...]
  • value 에는 string, number, object, array, true, false, null 값 등이 올 수 있다.
  • https://www.json.org/ 
 

JSON

 

www.json.org

## Gson API

  • JSON 을 핸들링 하기 위해 가장 많이 사용하는 API. (구글에서 만든 API)

아래 데이터를 변환한다고 할때.

BookDTO vo = new BookDTO("Java", 15000, "가나", 500);

1. Gson 을 활용하여 Object를 JSON으로 바꾸기 (Object -> JSON)

Gson gs = new Gson();
String json = gs.toJson(vo);

System.out.println(json);

=> Syso 출력결과.
{"title" : "Java", "price" : 15000, "company" : "가나", "page" : 500}

2. Gson 을 활용하여 JSON을 Object 로 바꾸기 (JSON -> Object)

BookDTO dto = gs.fromJson(json, BookDTO.class);
System.out.println(dto.toString());
System.out.println(dto.getTitle() + "\t" + dto.getPrice() + "\t" + dto.getCompany());

=> Syso 출력결과.
{"title" : "Java", "price" : 15000, "company" : "가나", "page" : 500}
BookDTO [title=Java, price=15000, company=가나, page=500]

3. Gson을 활용하여 List를 JSON 으로 바꾸기 (List -> JSON)

List<BookDTO> list = new ArrayList<BookDTO>();
list.add(new BookDTO("Java", 15000, "가나", 500));
list.add(new BookDTO("Python", 12000, "다라", 300));
String gsList = gs.toJson(list);
System.out.println(gsList);

=> Syso 출력결과.
[{"title" : "Java", "price" : 15000, "company" : "가나, "page" : 500},
{"title" : "Python", "price" : 12000, "company" : "다라, "page" : 300}]

4. Gson을 활용하여 JSON을 List 로 바꾸기 (JSON -> List)

List<BookDTO> lst = gs.fromJson(gsList, new TypeToken<List<BookDTO>>(){}.getType());
for (BookDTO v : lst) {
	System.out.println(v);
}

=> Syso 출력결과.
BookDTO [title=Java, price=15000, company=가나, page=500]
BookDTO [title=Python, price=12000, company=다라, page=300]
반응형

+ Recent posts