๐ŸŒˆ [Section2] 2. JSON

ํ˜„์ฃผยท2022๋…„ 9์›” 21์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
21/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • JSON
  • JSON ์‹ค์Šต

โœ๏ธ JSON (JavaScript Object Notation)

  • ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด ํ˜•ํƒœ์˜ ํฌ๋งท

  • ๋งŽ์€ ์–ธ์–ด์—์„œ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ

  • ๊ฐ์ฒด์˜ ํ‚ค์™€ ๊ฐ’์„ ""๋กœ ๊ฐ์‹ธ์ค˜์•ผํ•จ

  • ํ‚ค์™€ ๊ฐ’ ์‚ฌ์ด, ํ‚ค-๊ฐ’ ์Œ ์‚ฌ์ด์— ๊ณต๋ฐฑ x

๋ณดํ†ต ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•˜๋ ค๋ฉด ์ˆ˜์‹ ์ž์™€ ๋ฐœ์‹ ์ž๊ฐ€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์š”ํ•˜๊ฑฐ๋‚˜, ๋ฌธ์ž์—ด์ฒ˜๋Ÿผ ๋ฒ”์šฉ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผํ•จ
But, Java๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ด๋Ÿฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•… ๋ถˆ๊ฐ€
โžœ ๊ฐ์ฒด๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ JSON ํ˜•ํƒœ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•จ

โœ” ์ง๋ ฌํ™”(serialize)

  • ๊ฐ์ฒด โžœ JSON ํ˜•ํƒœ
  • ObjectMapperํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ writeValueAsStringํ•˜๋Š” ๊ณผ์ •

โœ” ์—ญ์ง๋ ฌํ™”(deserialize)

  • ์ง๋ ฌํ™”๋œ JSON์— ๋ฉ”์†Œ๋“œ โžœ ๊ฐ์ฒด
  • readValue๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •


๐Ÿ’ช JSON ์‹ค์Šต

โœ”๏ธ ์ž…๋ ฅ๋œ ๊ฐ’์ด ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ

if(data instanceof String) { //๋ฌธ์ž์—ด์ธ data๊ฐ€ String ์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธ
	return "\"" + (String) data + "\""; //String์œผ๋กœ ๋ณ€ํ™˜
}

โœ”๏ธ ์ž…๋ ฅ๋œ ๊ฐ’์ด Integer์ผ ๊ฒฝ์šฐ

if(data instanceof Integer){ //Integer์ธ data๊ฐ€ Integer ์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธ
	return String.valueOf(data); //String์œผ๋กœ ๋ณ€ํ™˜
}

โœ”๏ธ ์ž…๋ ฅ๋œ ๊ฐ’์ด Boolean์ผ ๊ฒฝ์šฐ

if(data instanceof Boolean){ //Boolean์ธ data๊ฐ€ Boolean ์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธ
	return String.valueOf(data); //String์œผ๋กœ ๋ณ€ํ™˜
}

โœ”๏ธ ์ž…๋ ฅ๋œ ๊ฐ’์ด Object[]์ผ ๊ฒฝ์šฐ

if(data instanceof Object[]){
	Object[] ob = (Object[]) data; //data๋ฅผ ๊ฐ•์ œ ํ˜•๋ณ€ํ™˜
	for(int i = 0; i < ob.length; i++){
	ob[i] = stringify(ob[i]);
    //์žฌ๊ท€ ํ˜ธ์ถœํ•˜์—ฌ ob ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ํด๋ž˜์Šค๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ˆœํ™˜ํ•˜๋ฉด์„œ ๋ชจ๋‘ String์œผ๋กœ ๋ณ€ํ™˜
	}
	return Arrays.toString(ob).replaceAll(" ","");
    //๋ฐฐ์—ด์„ String์œผ๋กœ ๋ณ€ํ™˜ ํ›„, ๊ณต๋ฐฑ ์ œ๊ฑฐ
}

โœ”๏ธ ์ž…๋ ฅ๋œ ๊ฐ’์ด HashMap์ผ ๊ฒฝ์šฐ

if(data instanceof HashMap){
	HashMap<Object, Object> map = (HashMap<Object, Object>) data; //data๋ฅผ ๊ฐ•์ œ ํ˜•๋ณ€ํ™˜
	HashMap<Object, Object> result = new LinkedHashMap<>();
	//์ด ๊ฒฝ์šฐ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ด์„œ ์ž๋™์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์ฃผ๋Š” LinkedHashMap ์จ์•ผ ํ•จ
	//(์›๋ž˜๋Š” ๊ทธ๋ƒฅ HashMap ์จ๋„ ๋จ)
โ €
	for(Map.Entry<Object, Object> entry : map.entrySet()){
	String key = stringify(entry.getKey()); //์žฌ๊ท€ ํ˜ธ์ถœํ•˜์—ฌ key๊ฐ’ ๋ณ€ํ™˜
	String value = stringify(entry.getValue()); //์žฌ๊ท€ ํ˜ธ์ถœํ•˜์—ฌ value๊ฐ’ ๋ณ€ํ™˜
โ €
	result.put(key, value); //๋ณ€ํ™˜ํ•œ ๊ฐ ๊ฐ’๋“ค์„ result ๋งต์— ๋„ฃ์–ด์คŒ
	}
	return result.toString().replaceAll(" ","").replaceAll("=",":");
    //๋ชจ๋‘ String์œผ๋กœ ๋ฐ”๊พผ ํ›„, ๊ณต๋ฐฑ ์ œ๊ฑฐํ•˜๊ณ , '='๋ฅผ ':'๋กœ ๋ฐ”๊พผ๋‹ค
}

๐Ÿ’ฆ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ”๋˜ ์ โ €

Q1) ์ž…๋ ฅ๋ฐ›์€ ๊ฐ ๊ฐ’์„ ์–ด๋–ค ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š”์ง€
โ €
โžœ ๋ฒ”์šฉ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผํ•˜๊ธฐ์— ๋ชจ๋‘ String์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค!!


Q2) ๋ฐฐ์—ด๊ณผ HashMap์„ ์ž…๋ ฅ๋ฐ›์„ ๊ฒฝ์šฐ ์™œ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€
โ €
โžœ ๋ฐฐ์—ด๊ณผ HashMap ์•ˆ์˜ ๊ฐ’๋“ค์ด Boolean ํƒ€์ž…์ด ์˜ฌ ์ˆ˜๋„ ์žˆ๊ณ , String ํ˜น์€ Integer ํƒ€์ž…์ผ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, / ์•ž์— ๋ฏธ๋ฆฌ ์ € ๊ธฐ๋ณธํ˜• ํƒ€์ž…๋“ค์„ ๋ชจ๋‘ String ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ์ž‘์„ฑํ•˜๊ณ  / ๊ทธ ๋ฐ‘์— ์ž‘์„ฑ๋œ ๋ฐฐ์—ด๊ณผ HashMap์˜ ์žฌ๊ท€๊ฐ€ ๋Œ๋ฉด์„œ ํด๋ž˜์Šค์˜ ๋งจ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€ ์ญ‰ ๋‚ด๋ ค์˜ค๋ฉด์„œ ์ž๊ธฐ์˜ ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์„œ๋“œ์— ๋“ค์–ด๊ฐ€์„œ String ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ์ด๋‹ค!


๐ŸŒˆ ๋Š๋‚€์ 

์˜ค๋Š˜ ๋„ˆ์–ด์–ด์–ด๋ฌด ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค!!
์–ด์ œ ํ•™์Šต์—์„œ ๋ถ„๋ช… ์žฌ๊ท€์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๊ตฌ์กฐ๋Š” ์ดํ•ด๋ฅผ ํ–ˆ๋Š”๋ฐ ์˜ค๋Š˜ ์‹ค์Šต์„ ํ•˜๋ฉฐ ์จ๋จน์„๋ ค ํ•˜๋‹ˆ ์‚ฌ์‹ค ์ด ์žฌ๊ท€๊ฐ€ ์™œ ์“ฐ์ด๋Š”์ง€๋ถ€ํ„ฐ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์„œ ์“ธ ์—„๋‘์กฐ์ฐจ ์•ˆ๋‚ฌ๋‹ค ์—‰์—‰ใ… 
๊ทธ๊ฑฐ๋ž‘ ์—ฌ๋Ÿฌ ์˜ค๋ฅ˜๋•Œ๋ฌธ์— ์˜ค๋Š˜์€ ๊ธฐ๊ฐ€ ๋‹ค ๋นจ๋ ธ๋˜ ํ•˜๋ฃจ.. ๐Ÿ˜ฑ
ํŽ˜์–ด๋‹˜์ด ๋‚˜๋ณด๊ณ  ์–ด์ œ๋ž‘ ๋‹ค๋ฅด๊ฒŒ ์˜ค๋Š˜์€ ๋งŽ์ด ์ง€์น˜์‹  ๊ฒƒ ๊ฐ™๋‹ค๊ณ .. ใ…‹ใ…‹ใ…‹ใ…‹ ใ… ใ… 
๊ทธ๋ž˜๋„ ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํŽ˜์–ด๋‹˜๊ณผ ๊ฐ™์ด ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๋‚˜๊ฐ”๋‹ค.
๋‚˜๋Š” ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋ฉด ์ž๊พธ '์™œ์ง€??' ์ด๊ฒŒ ๋– ์˜ฌ๋ผ์„œ ๋‹ค์Œ์œผ๋กœ ์ง„๋„๊ฐ€ ์•ˆ๋‚˜๊ฐ€๋Š” ์‚ฌ๋žŒ์ด๋ผ
๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋ ค๊ณ  ๋จธ๋ฆฌ๋งŒ ๊ตด๋ฆฌ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ํŽ˜์–ด๋‹˜์ด ์ผ๋‹จ ํ•ด๋ณด์ž๊ณ  ํ•ด์„œ ๊ทธ๋ž˜๋„ ์ž˜ ๋งˆ์นœ ๊ฒƒ ๊ฐ™๋‹ค!!
๊ทธ๋ž˜๋„ ์ œ์ถœ๊นŒ์ง€ ๋‹ค ํ•˜๊ณ  ์คŒ์„ธ์…˜์—์„œ ์„ค๋ช…์„ ๋“ค์œผ๋‹ˆ๊นŒ ๊ทธ๋ž˜๋„ ๊ฐ์ด ์žกํžˆ๊ธด ํ–ˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋” ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค.
๊ทผ๋ฐ ๋‚˜ ์ž๊พธ JSON์„ JASON์œผ๋กœ ์“ด๋‹ค.. JASON์”จ ๋ˆ„๊ตฌ์„ธ์—ฌ..?

0๊ฐœ์˜ ๋Œ“๊ธ€