참고의 링크를 보면 각 언어별로 http통신을 하는 방법에 대해서 알아보았다.
이번에는 그 통신으로 받은 데이터가 RESTful형태를 띄고 있다면 각각 언어의 자료형에 맞게 json데이터로 바꿔보자는 것이다.
즉 json은 문자열로 직렬화되서 전달되는데 이를 다시 언어에서 사용할 수 있는 데이터로 변환하자는 것이다.
내부에서 각각 언어에 맞게 알맞은 형태로 사용하는 법에 대해서 배워볼 것이다.
이 포스팅은 참고의 포스팅에 매우 강한 연관성을 가지므로 읽어볼것을 권한다.
//https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.5
package com.company;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class Main2 {
public static void main(String[] args) {
String strUrl = "https://httpbin.org/get";
String strMethod = "get";
BufferedReader in = null;
try {
URL url = new URL(strUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod(strMethod.toUpperCase());
in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = (JsonObject) jsonParser.parse(in);
System.out.println(jsonObject);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
자바는 gson을 사용해서 파싱을 Json데이터를 처리하는게 가장 유리한 방법이다.
HashMap으로 재 매칭을 해도 되지만 일단은 JsonObject로 쓰는게 가장 편하다.
var request = require('request');
var strUri = 'https://httpbin.org/get';
var strMethod = 'get';
request({uri: strUri, method: strMethod}, (err, res, body) => {
var jsonObject = JSON.parse(body);
console.log(jsonObject)
});
자바스크립트에서는 JSON.parse를 사용해주면 손쉽게 문자열을 json object로 변경 가능하다.
import requests
strUrl = 'https://httpbin.org/get'
strMethod = 'get'
if strMethod == 'get':
data1 = requests.get(strUrl).json()
print(data1)
data2 = getattr(requests, strMethod)(strUrl).json()
print(data2)
파이썬의 경우 저번 포스팅에서 text를 json()로 바꿔주면 알아서 dictionary로 매핑된다. 매우 편하다.
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
strURI := "https://httpbin.org/get"
resp, _ := http.Get(strURI)
respBody, _ := ioutil.ReadAll(resp.Body)
jsonData := map[string]interface{}{}
json.Unmarshal(respBody, &jsonData)
fmt.Println(jsonData)
}
go에서 net/http는 일단 바이트단위로 넘어 온다. 그걸 바로 사용해주면되므로 코드가 조금은 달라지게된다.