요즘은 데이터 저장 방식을 XML 보다 json 을 더 많이 쓰는걸로 알고있는데요, 직접 split 이나 정규식을 사용하여 json 데이터를 파싱하는건 정말정말 귀찮아서 훨신 편한 라이브러리를 사용합니다. 저는 Newtonsoft.Json 을 사용하니 이걸로 강좌합니다(사실 아는게 이거밖에..)
Newtonsoft.Json 은 NuGet 에서 Newton 만 쳐도 나옵니다. 혹은 첨부파일 참조해주시고 Newtonsoft.Json.Linq 도 참조해주시고 ( using Newtonsoft.Json.Linq; )
string json = @" { "car" : { "Name" : "Sonata" } , "test" : "abc" } " //json 문자열
JObject jobj = JObject.Parse(json); //문자를 객체화
이렇게하면 파싱 끝입니다. 사용방법은
MessageBox.Show(jobj["test"].ToString());
"test" : "abc" 이므로 출력값은 "abc" 입니다.
json 에서 "car" : { "Name" : "Sonata" } " 와 같이 car 의 값이 오브젝트라도 그냥
jobj["car"]["Name"].ToString()
하면 car 의 Name 인 "Sonata" 가 반환됩니다
그럼 json 에서 배열일때는 어떻하냐..
string json = @"[ "dog" , "cat" , "horse" ]"
JArray jarr = JArray.Parse(json)
JObject 를 JArray 로 바꿔주기만 하면 파싱됩니다.
일반 배열이랑 비슷하게 사용하면 되요
foreach(JObject jobj in jarr)
{
MessageBox.Show(jobj.ToString());
}
마지막으로 이것들을 응용해서 BukkitAPI 를 파싱해 보겠습니다
using Newtonsoft.Json.Linq;
using System.Net;
참조해주시고
using (WebClient wc = new WebClient())
{
string json = wc.DownloadString("http://ksi123456ab.dothome.co.kr/API/Plugin.json"); //API 사이트에서 json 받아옴
JArray jarr = JArray.Parse(json); //json 객체로
foreach(JObject jobj in jarr)
{
MessageBox.Show(jobj["name"].ToString() + " , 버전 : " + jobj["version"].ToString() + "₩n" + jobj["url"].ToString()); //플러그인명,버전,url 출력
}
}
결과
플러그인명 , 버전 : x.x.x
http://○○○.○○○○○.○○○
잘못된거/안되는거 있으면 댓글남겨주세요