์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

ํŒŒ์‹ฑ์ด๋ž€ ๋ญ˜๊นŒ?(JSON ํŒŒ์‹ฑ )

JAVA

by ๋ฏธ๋กœ910 2024. 6. 7. 11:51

๋ณธ๋ฌธ

๐Ÿ’ก ํŒŒ์‹ฑ(Parsing)์ด๋ž€
์ปดํ“จํ„ฐ ๊ณผํ•™์—์„œ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•˜๊ณ  ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์‹ฑ์€ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ์—์„œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์‹ฑ์„ ํ†ตํ•ด ์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์‹ฑ์˜ ์ฃผ์š” ๊ฐœ๋…

  1. ๊ตฌ๋ฌธ ๋ถ„์„(Syntax Analysis):
    • ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ฌธ ๊ทœ์น™์— ๋”ฐ๋ผ ํ•ด์„ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
    • ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(Syntax Tree)๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  2. ๋ฐ์ดํ„ฐ ํ˜•์‹ ๋ณ€ํ™˜:
    • ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ํ˜•์‹(์˜ˆ: JSON, XML)์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, JSON ํ˜•์‹์˜ ๋ฌธ์ž์—ด์„ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, XML ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด ํฌํ•จ๋œ๋‹ค.
  3. ์ •๋ณด ์ถ”์ถœ:
    • ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ์—์„œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํŠน์ • ๋ชฉ์ ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ํŽ˜์ด์ง€์—์„œ ํŠน์ • ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ์›น ์Šคํฌ๋ž˜ํ•‘(Web Scraping)์ด ํฌํ•จ๋œ๋‹ค.

 

JSON ํŒŒ์‹ฑ์ด๋ž€?

JSON(JavaScript Object Notation)์€ ๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ˜•์‹์œผ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํ‘œ๊ธฐ๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. JSON ํŒŒ์‹ฑ์€ JSON ํ˜•์‹์˜ ๋ฌธ์ž์—ด์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

{
    "name": "John Doe",
    "age": 30,
    "email": "johndoe@example.com"
}

๋ฐฐ์—ด(Array):

  • ๋Œ€๊ด„ํ˜ธ [] ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ๊ฐ’์˜ ์ˆœ์„œ ์žˆ๋Š” ๋ชฉ๋ก์ด๋‹ค.
  • ๊ฐ ๊ฐ’์€ ๋ชจ๋“  JSON ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
[
  "apple",
  "banana",
  "cherry"
]

๋ฌธ์ž์—ด(String):

  • ํฐ๋”ฐ์˜ดํ‘œ ""๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์ด๋‹ค.
  • ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค(\n, \t, \" ๋“ฑ)๋ฅผ ์ง€์›ํ•œ๋‹ค.

์ˆซ์ž(Number):

  • ์ •์ˆ˜ ๋˜๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž์ด๋‹ค.
  • 10์ง„์ˆ˜ ํ˜•์‹๋งŒ ์ง€์›ํ•˜๋ฉฐ, 8์ง„์ˆ˜ ๋ฐ 16์ง„์ˆ˜๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ถˆ๋ฆฌ์–ธ(Boolean):

  • true ๋˜๋Š” false ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

๋„(Null):

  • null ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

 

Json Array ํ˜•์‹ ์˜ˆ์‹œ

[
	{
	  "name": "John Doe",
	  "age": 30,
	  "isStudent": false
	},
	{
	  "name": "John Doe",
	  "age": 30,
	  "isStudent": false
	}
]

Json Object ํ˜•์‹์— ์˜ˆ์‹œ

{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "scores": [95, 87, 92],
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "zip": "12345"
  },
  "courses": [
    {
      "name": "Math",
      "grade": "A"
    },
    {
      "name": "English",
      "grade": "B"
    }
  ],
  "graduationYear": null
}

ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

JSON ํŒŒ์‹ฑ์„ ์œ„ํ•ด GSON ๋ผ์ด๋ธŒ๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ ํ•œ๋‹ค.

(๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์ง์ ‘ JAR ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.)

import com.google.gson.Gson;

public class MainTest1 {

	public static void main(String[] args) {
		
		// Gson <-- ํ˜„์žฌ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ 
		// lib ํด๋”์— Gson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ 
		// ์šฐ๋ฆฌ ์†Œ์Šค ์ฝ”๋“œ์ƒ์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •์ด ํ•„์š” ํ•˜๋‹ค. 
		
		// ํ”„๋กœ์ ํŠธ ์†์„ฑ์—์„œ ๋นŒ๋“œํŒจ์Šค ๋“ค์–ด๊ฐ€์„œ ํด๋ž˜์Šค ํŒจ์Šค์— add jars ๋“ฑ๋ก 
		Gson gson = new Gson();
		gson.fieldNamingStrategy();
		
		
	} // end of main 

} // end of class

์ž๋ฐ” ์ฝ”๋“œ์—์„œ JSON ํ˜•์‹์— ๋ฌธ์ž์—ด ๋งŒ๋“ค์–ด ๋ณด๊ธฐ

  1. ์ง์ ‘ ๋ฌธ์ž์—ด์„ ๊ฐ€๊ณตํ•ด์„œ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด ๋œ๋‹ค.
  2. Gson lib ๋ฅผ ์ด์šฉํ•ด์„œ ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
{
  "name": "ํ™๊ธธ๋™",
  "age": 21,
  "subjects": ["์ˆ˜ํ•™", "๋ฌผ๋ฆฌ", "์ปดํ“จํ„ฐ ๊ณผํ•™"]
}
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class GsonExample {
	
	public static void main(String[] args) {
		
		// 
		Student student1 = new Student("๊ณ ๊ธธ๋™", 40, "์• ์™„ํ•™๊ณผ");
		Student student2 = new Student("๋‘˜๋ฆฌ", 5, "๋ฌธ์ œํ•™๊ณผ");
		
		// 
		Student[] studentArr = {student1, student2};
		// --> ํŠน์ • ํ˜•์‹(๊ตฌ์กฐํ™”) ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ ํ•˜๊ณ  ์‹ถ๋‹ค.. --> JSON ํ˜•ํƒœ 
		
		Gson gson = new GsonBuilder().setPrettyPrinting().create();
		
		// ๊ฐ์ฒด๋ฅผ --> json ํ˜•์‹์— ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ ์‹œ์ผœ! --> ๋ฉ”์„œ๋“œ toJson() 
		String student1Str = gson.toJson(student1);
		System.out.println(student1Str);
		
		// setPrettyPrinting -> ์ด์˜๊ฒŒ ์ถœ๋ ฅํ•˜๋ผ ์˜ต์…˜.. 
		Gson gson2 = new Gson();
		String studednt2Str = gson2.toJson(student2);
		System.out.println(studednt2Str);
		
		// ๊ฐ์ฒด์—์„œ ---> ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๊ฐ€๋Šฅ ๊ทธ๋Ÿผ ๋ฐ˜๋Œ€๋กœ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜์ง€?? 
		// ๋ฌธ์ž์—ด์—์„œ ---> ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ• ๊นŒ? 
		
		// Object ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜  
		Student studentObject =  gson.fromJson(student1Str, Student.class);
		System.err.println(studentObject.getName());
		
		// ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜  
		Student[] StringArr =  gson.fromJson(gson.toJson(studentArr), Student[].class);
		System.err.println(StringArr);
		
		for (Student student : StringArr) {
			System.err.println(student.toString());
		}
		
		System.out.println("-----------------------------");
		System.out.println(gson.toJson(StringArr));
		
	}
}

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ