"์๋ , ์น๊ตฌ!"
"์ผ, ๋์๊ณ ."
"์ฌ๊ธฐ์ JSON ์ง๋ ฌํ์ ๊ธฐ๋ณธ ์ฌํญ์ ๋ฐฐ์ ์ต๋๊น?"
"'๊ธฐ๋ณธ'์ด ๋ฌด์จ ๋ป์ด์ผ? ๋ง์ด ์์!"
"๋๋ฌด ์์งํ๊ตฐ์. ๋น์ ์ ๊ทธ๊ฒ์ ์ ๋ฐ๋ ๋ชจ๋ฆ ๋๋ค. ๊ธฐ๊ปํด์ผ 10ํผ์ผํธ์ ๋๋ค."
"๋๋ด์ด์ผ. ๋ ๋ญ๊ฐ ์๋?"
"๊ฐ์ฒด ๊ณ์ธต์ ์ญ์ง๋ ฌํ(๋คํ์ฑ ์ญ์ง๋ ฌํ), ์ปฌ๋ ์ ์ ์ญ์ง๋ ฌํ, ๊ทธ๋ฆฌ๊ณ ํจ์ฌ ๋! Jackson ํ๋ ์์ํฌ๋ ํฌ๊ณ ๊ฐ๋ ฅํฉ๋๋ค. ์์งํ, ๋น์ ์ ํ๋ฉด์ ๊ธ๊ธฐ ์์ํ์ ๋ฟ์ ๋๋ค."
"์ข์, ๊ทธ๋ผ ๊ทธ๊ฒ์ ๋ํด ๋งํด์ค. ๋๋ ๊ท๊ฐ ๋ฉ์์ด."
"๋งค ๋ ์จ์ ํตํด ์ ์ ๋ ๋๋ํด์ง๋ ๊ฒ์ด ์ ๋ง ์ฆ๊ฒ์ต๋๋ค!"
"๊ธ์, ๋์์ฃผ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค, ๋ก๋ด ์น๊ตฌ!"
"์ค๋น๋์ด? ๊ทธ๋ผ ์ ๋ค์ด."
"์ด๋ฏธ ๋ฐฐ์ด ๊ฒ์ฒ๋ผ ์ฃผ์์ ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ ๋ชจ๋์ ์ฌ์ฉ๋ฉ๋๋ค. ์ค์ ๋ก ์ง๋ ฌํ์๋ ์ญ์ง๋ ฌํ๋ณด๋ค ํจ์ฌ ์ ์ ์ ๋ณด๊ฐ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
์๋ฐ ํด๋์ค | JSON |
---|---|
|
|
|
|
|
|
"Array, ArrayList, LinkedList ๋ฐ ๊ธฐํ ํด๋์ค์ ์ธ์คํด์ค๋ JSON ๋ฐฐ์ด๋ก ๋ณํ๋ฉ๋๋ค."
"ํ์ง๋ง JSON ๋ฐฐ์ด์ ์ญ์ง๋ ฌํํ ๋ ArrayList ๋๋ LinkedList ์ค ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๊น?"
"๋ง์์. ํด๋์ค ๋ฉค๋ฒ๊ฐ ์ธํฐํ์ด์ค(์: public List<Cat> cats )์ธ ๊ฒฝ์ฐ ์ด๋ค ๊ฐ์ฒด์ ์์ฑ์ ๋ถ์ฌํด์ผ ํฉ๋๊น?"
"์ง๋ ฌํ ํด์ ์ค์ ํ๋์ ์ถ๊ฐ ์ฃผ์์ ์ถ๊ฐํ๊ฑฐ๋ ๋์ ํด๋์ค๋ฅผ ๋ช ์์ ์ผ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค. ๋ค์ ์๋ฅผ ๋ณด์ญ์์ค."
public static void main(String[] args) throws IOException
{
String jsonString = ""{\"name\":\"Missy\",\"cats\":[{\"name\":\"Timmy\"},{\"name\":\"Killer\"}]}"";
StringReader reader = new StringReader(jsonString);
ObjectMapper mapper = new ObjectMapper();
Cat cat = mapper.readValue(reader, TypeFactory.collectionType(ArrayList.class, Cat.class));
}
@JsonAutoDetect
class Cat {
public String name;
public List<Cat> cats = new ArrayList<>();
Cat() {
}
}
"์ฆ, ๋งคํผ .readValue ๋ฉ์๋์ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ญ์ง๋ ฌํ ์ค์ ์ฌ์ฉํ ํด๋์ค ๋ชฉ๋ก์ ์ ๋ฌํ ์ ์์ต๋๋ค. "
"์ข์ต๋๋ค. ํธ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ JSON ๋ฐฐ์ด์ ArrayList ๋๋ LinkedList ๋ฑ ํ์ํ ๋ชจ๋ ๊ฒ์ผ๋ก ์ญ์ง๋ ฌํํ ์ ์์ต๋๋ค.
"์ฃผ์ ์ฌ์ฉ์ ๋ํด์๋ ์ธ๊ธํ์ จ๋๋ฐ ์ด๋ป๊ฒ ํ์๋์?"
"์ฝ์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
public static void main(String[] args) throws IOException
{
String jsonString = ""{\"name\":\"Missy\",\"cats\":[{\"name\":\"Timmy\"},{\"name\":\"Killer\"}]}"";
StringReader reader = new StringReader(jsonString);
ObjectMapper mapper = new ObjectMapper();
Cat cat = mapper.readValue(reader, Cat.class);
}
@JsonAutoDetect
class Cat
{
public String name;
@JsonDeserialize(as = ArrayList.class, contentAs = Cat.class)
public List<Cat> cats = new ArrayList<>();
Cat() {
}
}
" ์ฌ์ฉํ List ์ธํฐํ์ด์ค์ ๊ตฌํ์ ๋ํ๋ด๊ธฐ ์ํด @JsonDeserialize(as = ArrayList.class, contentAs = Cat.class) ์ฃผ์์ 5ํ์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค ."
"์. ๊ทธ๋ ๊ตฌ๋. ์ ๋ง ๊ฐ๋จํ๋ค."
"ํ์ง๋ง ๋ ์์ต๋๋ค. List์ ๋ฐ์ดํฐ ์ ํ์ด ์ธํฐํ์ด์ค์ด๊ธฐ๋ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ป๊ฒ ํ์๊ฒ ์ต๋๊น?"
"์ฌ๊ธฐ์์๋ ์ฃผ์์ ์ฌ์ฉํฉ๋๊น?"
"์, ๋์ผํฉ๋๋ค. ๋งค๊ฐ๋ณ์ ์ ํ์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
์ปฌ๋ ์ ์ ํ | ๋ฐ์ดํฐ ์ ํ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ |
---|---|
๋ชฉ๋ก | @JsonDeserialize(contentAs = ValueTypeImpl.class) |
์ง๋ | @JsonDeserialize(keyAs = KeyTypeImpl.class) |
"๋ฉ์ง๋ค! ์์ธกํ ์ ์๋ ๋ค์ํ ์ํฉ์ ํ์ํ ์ฃผ์์ด ์ ๋ง ๋ง๋ค."
"๊ทธ๊ฒ ์ ๋ถ๊ฐ ์๋๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๋ฅผ ์ฃผ์ ๊ณผ์ ์ผ๋ก ์ธ๋ํฉ๋๋ค. ์ค์ ํ๋ก์ ํธ์์ ํด๋์ค๋ ๊ฑฐ์ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋๋ ๋์ผํ ๊ธฐ๋ณธ ํด๋์ค ๋๋ ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด์ ์ด๋ฌํ ํด๋์ค๋ฅผ ํฌํจํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ญ์ง๋ ฌํํด์ผ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ์๋ฅผ ๋ค์ด:"
public static void main(String[] args) throws IOException
{
Cat cat = new Cat();
cat.name = "Missy";
cat.age = 5;
Dog dog = new Dog();
dog.name = "Killer";
dog.age = 8;
dog.owner = "Bill Jefferson";
ArrayList<Pet> pets = new ArrayList<Pet>();
pets.add(cat);
pets.add(dog);
StringWriter writer = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, pets);
System.out.println(writer.toString());
}
@JsonAutoDetect
class Pet
{
public String name;
}
@JsonAutoDetect
class Cat extends Pet
{
public int age;
}
@JsonAutoDetect
class Dog extends Pet
{
public int age;
public String owner;
}
[
{ "name" : "Missy", "age" : 5},
{ "name" : "Killer", "age" : 8 , "owner" : "Bill Jeferson"}
]
"์ฐ์ฌ ๊ฒฐ๊ณผ์ ์ฃผ๋ชฉํ๋ผ."
"์ด ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ํด๋์ค์ ๋ฐ์ดํฐ์ ๊ตฌ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฐ์ดํฐ๋ฅผ Java ๊ฐ์ฒด๋ก ์ญ์ง๋ ฌํํ ์ ์์ต๋๋ค."
"๋ช ๊ฐ์ง ๊ตฌ๋ณ๋๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. Dog์๋ ์์ ์ ํ๋๊ฐ ์์ต๋๋ค."
"์, ํ์ง๋ง ์ด ํ๋๋ null์ด๊ฑฐ๋ ์ง๋ ฌํ ์ค์ ์์ ํ ๊ฑด๋๋ธ ์ ์์ต๋๋ค."
"์, ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ์ฃผ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ํ์ ์ง์ ํ ์ ์์ต๋๊น?"
"์๋์ค. ์ญ์ง๋ ฌํ ํ์ ๋จ์ผ ์ปฌ๋ ์ ์๋ ๋ค์ํ Cat ๋ฐ Dog ๊ฐ์ฒด์ Pet์์ ์์ํ ์ ์๋ 12๊ฐ์ ๋ค๋ฅธ ํด๋์ค๊ฐ ์์ด์ผ ํฉ๋๋ค."
"๋๋์ฒด ์ฌ๊ธฐ์ ๋ฌด์์ ํ ์ ์์ต๋๊น?"
"์ฌ๊ธฐ์๋ ๋ ๊ฐ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค."
"๋จผ์ ํ ์ ํ์ ๋ค๋ฅธ ์ ํ๊ณผ ๊ตฌ๋ณํ๊ธฐ ์ํด ํน์ ํ๋๋ฅผ ์ ํํฉ๋๋ค. ํ๋๊ฐ ์์ผ๋ฉด ์์ฑ๋ฉ๋๋ค."
"๋ ๋ฒ์งธ๋ก, ยซ๋คํ์ฑ ์ญ์ง๋ ฌํยป ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ ์ ์๋ ํน์ ์ฃผ์์ด ์์ต๋๋ค. ์ํํ ์ ์๋ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
public static void main(String[] args) throws IOException
{
Cat cat = new Cat();
cat.name = "Missy";
cat.age = 5;
Dog dog = new Dog();
dog.name = "Killer";
dog.age = 8;
dog.owner = "Bill Jeferson";
House house = new House();
house.pets.add(dog);
house.pets.add(cat);
StringWriter writer = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, house);
System.out.println(writer.toString());
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
@JsonSubTypes.Type(value = Dog.class, name = "dog")
})
class Pet
{
public String name;
}
class Cat extends Pet
{
public int age;
}
class Dog extends Pet
{
public int age;
public String owner;
}
class House
{
public List<Pet> pets = new ArrayList<>();
}
{
"pets" : [
{"type" : "dog", "name" : "Killer", "age" : 8, "owner" : "Bill Jeferson"},
{"type" : "cat", "name" : "Missy", "age" : 5}
]
}
์ฃผ์์ ์ฌ์ฉํ์ฌ JSON ํํ์ Cat ํด๋์ค ์ ๋ํ cat ๊ฐ ๊ณผ Dog ํด๋์ค ์ ๋ํ dog ๊ฐ์ ๋ณด์ ํ type ์ด๋ผ๋ ํน์ ํ๋๊ฐ ํฌํจ๋จ์ ๋ํ๋ ๋๋ค . ์ด ์ ๋ณด๋ ๊ฐ์ฒด๋ฅผ ์ ์ ํ๊ฒ ์ญ์ง๋ ฌํํ๋ ๋ฐ ์ถฉ๋ถํฉ๋๋ค. ์ญ์ง๋ ฌํ ์ค์ ์์ฑํ ๊ฐ์ฒด์ ์ ํ์ ์ ํ ํ๋์ ๊ฐ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
"์ข ์ข ํด๋์ค ์ด๋ฆ์ด ์ ํ ํ๋(์: ยซcom.example.entity.Cat.classยป)์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋์ง๋ง ์ด๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋๋ค. JSON์ ์์ ํ๋ ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์์ ์ด๋ฆ์ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น? ์ค์๊ฐ์์ผ๋ก, ํด๋์ค๋ ๋๋๋ก ์ด๋ฆ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค. ํน์ ํด๋์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ๊ณ ์ ํ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค."
"๋ฉ์ง๋ค! ํ์จ. ์ญ์ง๋ ฌํ๊ฐ ์ด๋ ๊ฒ ๋ณต์กํ์ง ๋ชฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฏธ์ธ ์กฐ์ ํ ์ ์๋ ๊ฒ์ด ์ด๋ ๊ฒ ๋ง๋ค."
"๋ค. ์ด๊ฒ์ ๋น์ ์๊ฒ ์๋ก์ด ๊ฐ๋ ์ด์ง๋ง ์ด๊ฒ์ ๋น์ ์ ์ฒ์ฌ ํ๋ก๊ทธ๋๋จธ๋ก ๋ง๋ค์ด ์ค ์ค์ฉ์ ์ธ ์ง์์ ๋๋ค."
"์๋ฏธ๊ณ ๋ ๋ฉ์ง ํ๋ก๊ทธ๋๋จธ์ผ. ๋ฉ์ง๋ค!"
"์์์ด. ๊ฐ์ ์ฌ์ด."