티스토리 뷰
목차
반응형
[C# JSON] LINQ JSON 쿼리 제어 3가지 방법
C# LINQ는 C# JSON 객체에서 데이터를 가져오는 여러 가지 방법을 제공합니다. JObject, jArray 함수를 활용하면 속성별로 빠르게 데이터를 가져올 수 있습니다. 이 포스트에서 다루는 건 크게 2가지입니다.
- 속성 이름과 인덱스로 데이터 가져오기
- C# LINQ 쿼리 제어
[C# JSON] LINQ JSON 쿼리 제어 3가지 방법
속성 이름과 인덱스로 데이터 가져오기
C# JSON에서 값을 가져오는 가장 간단한 방법은 C# LINQ에서 JObject, JArray를 사용해 Item[Object] 형태로 데이터를 가져오는 것입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | string json = @"{ 'channel': { 'title': 'James Newton-King', 'link': 'http://james.newtonking.com', 'description': 'James Newton-King\'s blog.', 'item': [ { 'title': 'Json.NET 1.3 + New license + Now on CodePlex', 'description': 'Annoucing the release of Json.NET 1.3', 'link': 'http://james.newtonking.com/projects/json-net.aspx', 'categories': [ 'Json.NET', 'CodePlex' ] }, { 'title': 'LINQ to JSON beta', 'description': 'Annoucing LINQ to JSON', 'link': 'http://james.newtonking.com/projects/json-net.aspx', 'categories': [ 'Json.NET', 'LINQ' ] } ] } }"; JObject rss = JObject.Parse(json); string rssTitle = (string)rss["channel"]["title"]; // James Newton-King string itemTitle = (string)rss["channel"]["item"][0]["title"]; // Json.NET 1.3 + New license + Now on CodePlex JArray categories = (JArray)rss["channel"]["item"][0]["categories"]; // ["Json.NET", "CodePlex"] IList<string> categoriesText = categories.Select(c => (string)c).ToList(); // Json.NET // CodePlex | cs |
C# LINQ 쿼리 제어
C# LINQ를 통해 JObject, JArray에 쿼리를 날릴 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | var postTitles = from p in rss["channel"]["item"] select (string)p["title"]; foreach (var item in postTitles) { Console.WriteLine(item); } //LINQ to JSON beta //Json.NET 1.3 + New license + Now on CodePlex var categories = from c in rss["channel"]["item"].SelectMany(i => i["categories"]).Values<string>() group c by c into g orderby g.Count() descending select new { Category = g.Key, Count = g.Count() }; foreach (var c in categories) { Console.WriteLine(c.Category + " - Count: " + c.Count); } //Json.NET - Count: 2 //LINQ - Count: 1 //CodePlex - Count: 1 | cs |
[C# JSON] LINQ JSON 쿼리 제어 3가지 방법
LINQ 객체를 사용해 Deserialize
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Shortie { public string Original { get; set; } public string Shortened { get; set; } public string Short { get; set; } public ShortieException Error { get; set; } } public class ShortieException { public int Code { get; set; } public string ErrorMessage { get; set; } } | cs |
위와 같이 수동으로 제어할 수 있다면, C# Json 객체를 보다 쉽게 제어할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | string jsonText = @"{ 'short': { 'original': 'http://www.foo.com/', 'short': 'krehqk', 'error': { 'code': 0, 'msg': 'No action taken' } } }"; JObject json = JObject.Parse(jsonText); Shortie shortie = new Shortie { Original = (string)json["short"]["original"], Short = (string)json["short"]["short"], Error = new ShortieException { Code = (int)json["short"]["error"]["code"], ErrorMessage = (string)json["short"]["error"]["msg"] } }; Console.WriteLine(shortie.Original); // http://www.foo.com/ Console.WriteLine(shortie.Error.ErrorMessage); // No action taken | cs |
[C# JSON] LINQ JSON 쿼리 제어 3가지 방법
반응형