반응형

# JSON API 활용 (네이버 클라우드 플랫폼 지도 API 서비스 등록)

  • 네이버, 구글, 다음 등 위도와 경도 관련 서비스를 해주는 다양한 오픈 API 존재.

## 네이버 클라우드 플랫폼 지도 API 서비스 등록

1. 회원가입

 

NAVER CLOUD PLATFORM

cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification

www.ncloud.com

2. 네이버 지도 API 서비스 사용을 위한 등록방법

  • 우측 상단 콘솔 클릭.

  • Service > AI NAVER API 선택.

  • Application 등록 버튼 클릭.

  • Application 이름 설정.

  • 사용하고자 하는 서비스 선택

  • 서비스 환경 등록 관련 정보 입력. (별도로 정해진게 없어도 임의로 등록, 추후 변경)

  • 등록 완료 후 아래 화면에서 인증정보 버튼 클릭하여 정보 확인.

 

## 네이버 클라우드 플랫폼 지도 API 활용 (위도, 경도 추출)

1. Geocoding OpenAPI

 

Geocoding 개요 - Geocoding

 

api.ncloud-docs.com

2. 구현 (Geocoding OpenAPI 사용)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.json.simple.parser.JSONParser;

public class Project01_D {
	public static void main(String[] args) {
		// 주소 입력 -> 위도, 경도 좌표 추출.
		BufferedReader io = new BufferedReader(new InputStreamReader(System.in));	
		String clientId = "등록한 네이버 지도 API 인증정보 중 clientId 입력";
		String clientSecret = "등록한 네이버 지도 API 인증정보 중 clientSecret 입력";
		
		try {
			System.out.println("주소를 입력해주세요 : ");
			
			String address = io.readLine();
			String addr = URLEncoder.encode(address, "UTF-8");
			
			// Geocoding 개요에 나와있는 API URL 입력.
			String apiURL = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query=" + addr;	// JSON
			
			URL url = new URL(apiURL);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET");
			
			// Geocoding 개요에 나와있는 요청 헤더 입력.
			con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
			con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
			
			// 요청 결과 확인. 정상 호출인 경우 200
			int responseCode = con.getResponseCode();
			
			BufferedReader br;
			
			if (responseCode == 200) {
				br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			} else {
				br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
			}
			
			String inputLine;
			
			StringBuffer response = new StringBuffer();
			
			while((inputLine = br.readLine()) != null) {
				response.append(inputLine);
			}
			
			br.close();
			
			JSONTokener tokener = new JSONTokener(response.toString());
			JSONObject object = new JSONObject(tokener);			
			JSONArray arr = object.getJSONArray("addresses");
			
			for (int i = 0; i < arr.length(); i++) {
				JSONObject temp = (JSONObject) arr.get(i);
				System.out.println("address : " + temp.get("roadAddress"));
				System.out.println("jibunAddress : " + temp.get("jibunAddress"));
				System.out.println("위도 : " + temp.get("y"));
				System.out.println("경도 : " + temp.get("x"));
			}
			
			// JSON.simple 사용한 경우 아래와 같이 진행.
			/*JSONParser jpr = new JSONParser();
			JSONObject jarr = (JSONObject) jpr.parse(response.toString());
			JSONArray arr2 = (JSONArray) jarr.get("addresses");
			
			for (int i = 0; i < arr2.length(); i++) {
				JSONObject temp = (JSONObject) arr.get(i);
				System.out.println("address : " + temp.get("roadAddress"));
				System.out.println("jibunAddress : " + temp.get("jibunAddress"));
				System.out.println("위도 : " + temp.get("y"));
				System.out.println("경도 : " + temp.get("x"));
			}*/
		
		} catch (Exception  e) {
			System.out.println(e);
		}
	}
}
반응형
반응형

# 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