2015-09-05 3 views
1

Вот JSON, что необходимо правильным разобрано:JSON синтаксического C# получить конкретные данные

https://docs.acrcloud.com/metadata

я пытаюсь получить: название песни

, названия альбома, художники.

Я пытался так:

JObject o = JObject.Parse(result);    
Console.WriteLine("Name: " + o["metadata"]["music"]); 

и он работает, но я получаю все данные в «музыке» Мне просто нужно, чтобы извлечь определенные данные.

+0

Тогда возьмите вместо этого свои «конкретные данные»! – cubrr

+0

Я не знаю, как @cubrr проверить JSON немного сложно – user3181034

+1

Ну, у вас уже есть «музыка» из «метаданных». Теперь повторите процесс, чтобы получить «название» из «музыки». Похоже, что объект находится внутри массива, поэтому 'o [" metadata "] [" music "] [0]' получит доступ к фактическому объекту. – cubrr

ответ

1

Для этой цели вы можете использовать SelectTokens and SelectToken. Они оба поддерживают JsonPATH query syntax включая символы:

 var o = JToken.Parse(result); 
     var musicInfo = o.SelectTokens("metadata.music[0]") 
      .Select(t => new 
      { 
       SongTitle = (string)t.SelectToken("title"), 
       AlbumName = (string)t.SelectToken("album.name"), 
       Artists = t.SelectTokens("artists[*].name").Select(n => (string)n).ToArray() 
      }) 
      .FirstOrDefault(); 

Тогда

 Console.WriteLine(JsonConvert.SerializeObject(musicInfo, Formatting.Indented)); 

Печать

{ 
    "SongTitle": "Listen (From the Motion Picture \"Dreamgirls\")", 
    "AlbumName": "B'Day Deluxe Edition", 
    "Artists": [ 
    "Beyoncé" 
    ] 
} 

который, что вы хотите.

+0

Tnx @dbc это отлично работает! – user3181034

Смежные вопросы