🔷 JavaScript Object Notation
🔷 왜 JSON인가?
주요 프론트엔드 프레임워크에 의해서 지원된다.
공식 포맷이기 때문에 개발자 사이에 데이터 통신을 할 수 있다.
텍스트로 이루어져 있어 읽고 쓰기 쉽다.
XML
에 비해 용량이 적고 이해하기 쉽다.
언어와 플랫폼에 독립적이므로, 서로 다른 시스템 간 데이터 교환에 좋다.
🔷 JSON은 key, value의 쌍으로 표현한다.
{"key": value, ...}
// key는 ""로 묶어서 표현
// value는 String일 경우 ""로 묶어서 표현
🔷 value로 object, array, number, string, true, false, null 사용
// object
{"id": "Bzeromo", "name": "younggue"}
// Array
["hong", "kim", "park", "lee"]
let student = {
name: "박영규",
age: 25,
hobbies: ["노래하기", "유튜브", "LOL"],
}
console.log(student);
//{name: '박영규', age: 25, hobbies: Array(3)}
// JSON String
// JSON.stringify
let str = JSON.stringify(student);
console.log(str);
// {"name":"박영규","age":25,"hobbies":["노래하기","유튜브","LOL"]}
// JSON.string(data) => JavaScript Object
// JSON.parse
let someStr = '{"name":"박영규","age":25,"hobbies":["노래하기","유튜브","LOL"]}';
let student2 = JSON.parse(someStr);
console.log(student2);
// {name: '박영규', age: 25, hobbies: Array(3)}
console.log(typeof(student)) // object
console.log(typeof(str)) // string
console.log(typeof(someStr)) // string
console.log(typeof(student2)) // object
let arr = ["kim", "lee", "yeo", "jeon"];
str = JSON.stringify(arr);
arr.forEach((student) => console.log(student));
// kim
// lee
// yeo
// jeon
// map, filter
// map -> 새로운 배열 생성
// filter -> 원하는 값만 골라내서 새로운 배열을 만들 때
let arr2 = [1, 2, 3, 4];
let arr3 = arr2.map((num) => {
return num + 2;
})
console.log(arr3);
// [3, 4, 5, 6]
let arr4 = arr2.filter((num) => num%2===0);
console.log(arr4);
// [2, 4]
🔷 클래스 객체와 JSON 변환
🔷 Java 객체를 JSON 표현으로 변환하는데 사용할 수 있는 라이브러리
toJson()
, fromJson()
)🔷 외부 라이브러리(GSON) 인식시키기
package JSON;
public class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
package JSON;
import com.google.gson.Gson;
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
// 객체 => json 문자열
Person p1 = new Person("박영규", 25);
Person p2 = new Person("박민정", 22);
Person p3 = new Person("안상준", 27);
String p1Str = gson.toJson(p1);
String p2Str = gson.toJson(p2);
String p3Str = gson.toJson(p3);
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
// Person [name=박영규, age=25]
// Person [name=박민정, age=22]
// Person [name=안상준, age=27]
System.out.println(p1Str);
System.out.println(p2Str);
System.out.println(p3Str);
// {"name":"박영규","age":25}
// {"name":"박민정","age":22}
// {"name":"안상준","age":27}
}
}
package JSON;
import com.google.gson.Gson;
public class Test2 {
public static void main(String[] args) {
Gson gson = new Gson();
// json 문자열 => 자바 객체
// gson.fromJson("문자열", 타입.class)
String str1 = "{\"name\":\"박영규\", \"age\":25}";
String str2 = "{\"name\":\"박민정\", \"age\":23}";
String str3 = "{\"name\":\"박재민\", \"age\":30}";
Person p1 = gson.fromJson(str1, Person.class);
Person p2 = gson.fromJson(str2, Person.class);
Person p3 = gson.fromJson(str3, Person.class);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
// {"name":"박영규", "age":25}
// {"name":"박민정", "age":23}
// {"name":"박재민", "age":30}
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
// Person [name=박영규, age=25]
// Person [name=박민정, age=23]
// Person [name=박재민, age=30]
}
}
package JSON3;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class Test {
// 여러 개의 객체를 배열에 넣고 Json 형식으로 변환시키기
// Json 형식의 문자열을 객체로 만들어 배열 안에 넣기
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
list.add(new Person("박영규", 25));
list.add(new Person("박영순", 85));
list.add(new Person("박영호", 28));
list.add(new Person("박영찬", 30));
list.add(new Person("박영준", 25));
list.add(new Person("박영희", 55));
list.add(new Person("박영선", 48));
list.add(new Person("박영진", 37));
System.out.println(list);
// [Person [name=박영규, age=25], ... ]
Gson gson = new Gson();
String str = gson.toJson(list);
System.out.println(str);
// [{"name":"박영규","age":25},{"name":"박영순","age":85}, ... ]
String str2 = "[{\"name\":\"박영규\",\"age\":25},{\"name\":\"박영순\",\"age\":85},{\"name\":\"박영호\",\"age\":28},{\"name\":\"박영찬\",\"age\":30},{\"name\":\"박영준\",\"age\":25},{\"name\":\"박영희\",\"age\":55},{\"name\":\"박영선\",\"age\":48},{\"name\":\"박영진\",\"age\":37}]";
Person [] arr = gson.fromJson(str2, Person[].class);
System.out.println(Arrays.toString(arr));
// [Person [name=박영규, age=25], Person [name=박영순, age=85], ... ]
Type listType = new TypeToken<ArrayList<Person>>() {}.getType();
List<Person>list2 = gson.fromJson(str2, listType);
System.out.println(list2);
// [Person [name=박영규, age=25], Person [name=박영순, age=85], ... ]
}
}
package JSON4;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import com.google.gson.Gson;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("data/refrigerator.json")));
// 파일의 모든 행의 문자열을 다 모아야 하므로 StringBuilder 사용
StringBuilder sb = new StringBuilder();
String str = null; // 한줄씩 읽어왔을 때 문자열 임시 저장 변수
while((str = br.readLine()) != null) {
sb.append(str).append("\n");
}
// sb에 모든 문자열이 모여있음
Gson gson = new Gson();
Refrigerator [] arr = gson.fromJson(sb.toString(), Refrigerator[].class);
System.out.println(Arrays.toString(arr));
// [Refrigerator [pCoed=null, pName=S냉장고, price=1000000, quantity=20, brand=삼성, desc=삼성에서 출시한 스마트 냉장고입니다., category=냉장고, liter=1000, freezer=true, year=2021], ... ]
arr[0].setPrice(2000000);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("data/refrigerator-newjson")));
String str2 = gson.toJson(arr);
bw.write(str2);
bw.close();
}
}