我知道有一些关于Newtonsoft的帖子,所以希望这不是重复…我正在尝试将Kazaa API返回的JSON数据转换为某种不错的对象
WebClient client = new WebClient(); Stream stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album"); StreamReader reader = new StreamReader(stream); List<string> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(reader.Read().ToString()); foreach (string item in list) { Console.WriteLine(item); } //Console.WriteLine(reader.ReadLine()); stream.Close();
JsonConvert系列只是我正在尝试的最新系列…我不太了解它,希望通过询问大家来消除一些麻烦。我最初试图将其转换为Dictionary或其他内容……实际上,我只需要在那里获取几个值,因此从文档来看,也许Newtonsoft的LINQ to JSON可能是更好的选择?有想法/链接吗?
这是JSON返回数据的示例:
{ "page": 1, "total_pages": 8, "total_entries": 74, "q": "muse", "albums": [ { "name": "Muse", "permalink": "Muse", "cover_image_url": "http://image.kazaa.com/images/69/01672812 1569/Yaron_Herman_Trio/Muse/Yaron_Herman_Trio-Muse_1.jpg", "id": 93098, "artist_name": "Yaron Herman Trio" }, { "name": "Muse", "permalink": "Muse", "cover_image_url": "htt p://image.kazaa.com/images/54/888880301154/Candy_Lo/Muse/Candy_Lo-Muse_1.jpg", "i d": 102702, "artist_name": "\u76e7\u5de7\u97f3" }, { "name": "Absolution", "permalink": " Absolution", "cover_image_url": "http://image.kazaa.com/images/65/093624873365/Mus e/Absolution/Muse-Absolution_1.jpg", "id": 48896, "artist_name": "Muse" }, { "name": "Ab solution", "permalink": "Absolution-2", "cover_image_url": "http://image.kazaa.com/i mages/20/825646911820/Muse/Absolution/Muse-Absolution_1.jpg", "id": 118573, "artist _name": "Muse" }, { "name": "Black Holes And Revelations", "permalink": "Black-Holes-An d-Revelations", "cover_image_url": "http://image.kazaa.com/images/66/093624428466/ Muse/Black_Holes_And_Revelations/Muse-Black_Holes_And_Revelations_1.jpg", "id": 48813, "artist_name": "Muse" }, { "name": "Black Holes And Revelations", "permalink": "Bla ck-Holes-And-Revelations-2", "cover_image_url": "http://image.kazaa.com/images/86/ 825646911486/Muse/Black_Holes_And_Revelations/Muse-Black_Holes_And_Revelations_1 .jpg", "id": 118543, "artist_name": "Muse" }, { "name": "Origin Of Symmetry", "permalink": "Origin-Of-Symmetry", "cover_image_url": "http://image.kazaa.com/images/29/825646 912629/Muse/Origin_Of_Symmetry/Muse-Origin_Of_Symmetry_1.jpg", "id": 120491, "artis t_name": "Muse" }, { "name": "Showbiz", "permalink": "Showbiz", "cover_image_url": "http: //image.kazaa.com/images/68/825646182268/Muse/Showbiz/Muse-Showbiz_1.jpg", "id": 60444, "artist_name": "Muse" }, { "name": "Showbiz", "permalink": "Showbiz-2", "cover_imag e_url": "http://image.kazaa.com/images/50/825646912650/Muse/Showbiz/Muse-Showbiz_ 1.jpg", "id": 118545, "artist_name": "Muse" }, { "name": "The Resistance", "permalink": "T he-Resistance", "cover_image_url": "http://image.kazaa.com/images/36/825646864836/ Muse/The_Resistance/Muse-The_Resistance_1.jpg", "id": 121171, "artist_name": "Muse" } ], "per_page": 10 }
我做了一些进一步的阅读,发现Newtonsoft的LINQ to JSON正是我想要的…使用WebClient,Stream,StreamReader和Newtonsoft …我可以在Kazaa上获取JSON数据,提取URL,下载文件并进行操作就像七行代码一样!我喜欢它。
WebClient client = new WebClient(); Stream stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album"); StreamReader reader = new StreamReader(stream); Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine()); // Instead of WriteLine, 2 or 3 lines of code here using WebClient to download the file Console.WriteLine((string)jObject["albums"][0]["cover_image_url"]); stream.Close();
这篇文章获得了很多点击,我认为包括注释中讨论的“使用”位可能会有所帮助。
using(var client = new WebClient()) using(var stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album")) using (var reader = new StreamReader(stream)) { var jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine()); Console.WriteLine((string) jObject["albums"][0]["cover_image_url"]); }
如果您只需要从JSON对象中获取一些项,则可以使用Json.NET的LINQ to JSON JObject类。例如:
JObject
JToken token = JObject.Parse(stringFullOfJson); int page = (int)token.SelectToken("page"); int totalPages = (int)token.SelectToken("total_pages");
我喜欢这种方法,因为您不需要完全反序列化JSON对象。API随手可得,它有时会因缺少对象属性(例如Twitter)而使您感到惊讶。
文档: 序列化和反序列化JSON与Json.NET 和 LINQ到JSON与Json.NET