[Rust] serde: JSON
serde๋ ๋ค์ํ ๋ฐ์ดํฐํ์๋ค์ ์ง๋ ฌํ/์ญ์ง๋ ฌํํ๊ฒ ๋์์ฃผ๋ ๋ฉ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
JSON, BSON, YAML, TOML, URL ๋ฑ๋ฑ ๋๋ถ๋ถ์ ํ์์ ์ง์ํ๋ค.
์ฐ์ ์ ์ด์ค์์ ๊ฐ์ฅ ๋จ๊ฑฐ์ด ํฌ๋งท์ธ JSON์ ๋จผ์ ๋ค๋ค๋ณด๊ฒ ๋ค.
๋จผ์ serde_json์ ์ข ์์ฑ์ ์ถ๊ฐํ๋ค.

๊ทธ๋ผ ๋ฐ์ค๋น๋ ๋์ด๋ค.
๋ฌธ์์ด->๊ฐ์ฒด
json ๋ฌธ์์ด์์ json ๊ฐ์ฒด๋ฅผ ๋ฝ์๋ด๋ ๊ฒ๋ถํฐ ํด๋ณด์.
json ๊ท๊ฒฉ์ ์ถฉ์กฑํ๋ ๊ฐ๋จํ ํํ์ ๋ฌธ์์ด์ ๋ง๋ค์ด๋ดค๋ค.

์ ๊ฑธ ํ์ฑํ๋ ค๋ฉด from_str ๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.

Value๋ ์ฌ๊ท์ ์ผ๋ก ์ ์๋ ์ด๊ฑฐ ํ์
์ด๋ค.
๊ทธ๋์ ๋ชจ๋ json ๊ฐ์ฒด๋ Value ํ์
์ด๊ธฐ๋ ํ๋ค.

์ฌํผ, ์ถ์ถ๋ Value ๊ฐ์ฒด์์ ์์๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด, ๊ทธ๋ฅ ํด๋น ์์์ ์ด๋ฆ์ผ๋ก ์ธ๋ฑ์ฑ์ ํ๋ฉด ๋๋ค.
๊ทธ๋ผ ๋ค์ ํด๋น ์์๋ฅผ Value๋ก ๊ฐ์ธ์ ๋ฐํํ๋ ๊ฒ์ด๋ค.

๊ทผ๋ฐ ์ ๋ถ Value๋ก๋ง ํ์ณ์๋ ์ ๋๋ก๋ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
Value๋ผ๋ ๊ป์ง์ ๋ฒ๊ฒจ์ ๊ธฐ๋ณธํ์
๋ค๋ก ๋ฐ๊พธ๋ ค๋ฉด ๋์๋๋ as_... ๋ฉ์๋๋ค์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด๊ฑด Option์ ๋ฐํํ๋ค.
๊ฐ๋ น as_i64๋ ํด๋น Value๊ฐ ์ซ์์ผ ๊ฒฝ์ฐ์ Some(๊ฐ)์, ์๋๋ฉด None์ ๋ฐํํ๋ ๊ฒ์ด๋ค.

์ ๋๋ก ๋๋ฆฌ๋ฉด ์ ๋ ๊ฒ์ด๋ค.

์ ์ฒด ์์ค๋ ์ด๋ ๋ค.
fn main()
{
//json ๋ฌธ์์ด
let json = r#"
{
"name":"ํ๊ธธ๋",
"age":300,
"hobby":["์ํ๊ฐ์", "๋ฑ์ฐ", "ํด์ ์ง"]
}
"#;
use serde_json::Value;
//๋ฌธ์์ด์ ํ์ฑํด json ๊ฐ์ฒด Value๋ฅผ ์์ฑ
let result:Value = serde_json::from_str(json)
.expect("ํ์ฑ ์คํจ");
<br>
let name:Value = result["name"].clone();
println!("name:{}", name);
let age:i64 = result["age"].as_i64()
.expect("์คํจ");
println!("age:{}", age);
println!("hobby:{}", result["hobby"]);
}๊ฐ์ฒด->๋ฌธ์์ด
์ด๋ฒ์ json ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๊ทธ๊ฑธ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ๋ณด์.
json ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฐ์ฅ ์์ฌ์ด ๋ฐฉ๋ฒ์ json! ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ด ๋งคํฌ๋ก ํจ์๋ json ๋ฌธ๋ฒ์ ๊ทธ๋๋ ์จ๋ฃ์ด์ Value ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
์ด๋ ๊ฒ ๋ง์ด๋ค.


๊ธฐ์กด Value ๊ฐ์ฒด์ ์ ์์๋ฅผ ์ง์ด๋ฃ๊ณ ์ถ๋ค๋ฉด, ๊ทธ๋ฅ ์ธ๋ฑ์ฑ์ ์๋ํ๋ฉด์ ์ Value ๊ฐ์ ๋ผ์๋ฃ์ผ๋ฉด ๋๋ค.

๊ตฌ์กฐ์ฒด๋ฅผ ์ด์ฉํ ์ง๋ ฌ/์ญ์ง๋ ฌํ
๊ทผ๋ฐ serde์์๋ ์ ๋ฌํ json์ ์ข
์์ ์ด๊ณ ๋ถํธํ ์ ์๋ ์ ๊ทผ ์์ด. ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํด์ ๊ทธ๊ฑธ ํตํด ๊ณง์ฅ json ๊ฐ์ฒด๋ฅผ ํ์ฑํ๊ฑฐ๋ ์์ฑํ ์ ์๋ค.
๊ทธ๋ฌ๋ ค๋ฉด serde๋ฅผ ์์กด์ฑ์ผ๋ก ์ถ๊ฐํด์ค์ผ ํ๋ค. derive๋ฅผ ๊ธฐ๋ฅ์ผ๋ก ๋ฃ์ด์ฃผ๊ณ .

๊ทธ๋ผ ์ด์ ํด๋ณด์
์ฌ์ฉํ json์ ํ์๋๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ Deserialize์ Serialize๋ฅผ derive๋ก ํ์์ํจ๋ค.
๊ทธ๋ผ ์ด๊ฒ๋ง์ผ๋ก๋ ๊ฐ ๋ณํ์ด ์์ ์์ฌ๋ก ๋์ํ๊ฒ ๋๋ค.
์ถ๋ ฅ์ฉ ๋ฉ์๋๋ ๊ฐ๋จํ๊ฒ ์ ์ํ๋ค.
๊ทธ๋ผ ๋ฌธ์์ด->๊ฐ์ฒด๋ก์ ๋ณํ์ ์ํํด๋ณด์
์ด๋ ๊ฒ json ํ
์คํธ๊ฐ ์๋ค๋ฉด

ํ์ฑ์ ์๋ํ ๋ Value ํ์
์ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ํด๋น ๊ตฌ์กฐ์ฒด๋ก ๋ฐ์ ์๊ฐ ์๋ค!
ํด๋น json ๋ฐ์ดํฐ๊ฐ ๊ตฌ์กฐ์ฒด์ ์์ ํ ๋ค์ด๋ง๋๋ค๋ ๊ฐ์ ํ์์ ๋ง์ด๋ค.


๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ json ํ ์คํธ๋ก ๋ณํํ๋ ๊ฒ๋ ๊ฐ๋จํ๋ค. ๊ทธ๋ฅ serde_json::to_string ๋ฉ์๋์ ์ฐธ์กฐ๋ก ์ ๋ฌํด์ฃผ๋ฉด Result๋ก ๊ฐ์ธ์ ๋ฐํํด์ค๋ค.


๊ทธ๋ ๋ค.