skip to Main Content

I need help. I’m making a program using the youtube library, for c#.

For songs it works perfect. The problem is in the playlist I want to recover "videoId" to add it to a database, to put the videos in "queue".

I am using this method:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key= {API key} & maxResults = 50 & playlistId = {id}

which returns a json, but the problem is when I want to retrieve the "videoId" field.

I’ve tried a lot of things and can’t get it to work. For example:

var json = wc.DownloadString ("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key=API_KEY&playlistId=PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N");
dynamic data = JObject.Parse (json);
Console.WriteLine ("playlist" + data.items.snippet.resourceId.videoId);
Console.WriteLine ("playlist" + data.items.snippet.videoId);
Console.WriteLine ("playlist" + data.items.videoId);
Console.WriteLine ("playlist" + data.videoId);

The json that it returns is like this:

[
  {
    "kind": "youtube#playlistItem",
    "etag": "_ON9HZaMSViWcbtKBRrSkH8D43Y",
    "id": "UEwtUFhLYjVqU2p3YlUwd3pBdUVvb0J2a1o5am5tWFI3Ti4xMjNBNTA2NDBDODU0QTE1",
    "snippet": {
      "publishedAt": "2021-05-17T09:33:13Z",
      "channelId": "UCn3uYZIYTMSvJraGKW2Blhw",
      "title": "C. Tangana, Niño de Elche, La Hungara - Tú Me Dejaste De Querer",
      "description": "C. Tangana – Tú me dejaste de querer ft La Húngara y Niño de Elche nnMERCHANDISING: https://www.ctangana.com nIG: https://www.instagram.com/c.tangana/nTW: https://twitter.com/c_tangananFB: https://www.facebook.com/ctanganaoficial/nnnLyrics Tú Me Dejaste De QuerernnTú me dejaste de querer nCuando te necesitabanCuando más falta hacíanTú me diste la espaldannTú me dejaste de querernCuando menos lo esperabanCuando más te quería nSe te fueron las ganas nnYo me creía que era el más cabrón nPero me estoy notando el corazónnEstás apretando mucho mami déjalonSi quieres te doy la razón nYo lo único que quiero es largarme de aquí nMe da igual dónde, puedes elegir nAlgún día dentro de poco me voy a arrepentir nDe haberte confesado lo que me haces sufrirnnTú me dejaste de querernCuando menos lo esperabanCuando más te quería nSe te fueron las ganas n nDe punta en blanco para ir a tu fiestanHe pasado tres días con la misma ropa puestanAndo loco por ti, perdiendo apuestas nDime en quién piensas cuando te acuestas. nPorque yo pienso en ti (son ilusiones)nYo pienso en ti (son ilusiones)nPorque yo pienso en ti (son ilusiones)nYo pienso en ti (son ilusiones)nnTú me dejaste de querer nCuando te necesitabanCuando más falta hacíanTú me diste la espaldannTú me dejaste de querernCuando menos lo esperabanCuando más te quería nSe te fueron las ganasnnn(C) 2020 Sony Music Entertainment España, S.L",
      "thumbnails": {
        "default": {
          "url": "https://i.ytimg.com/vi/ltmO9XQVdSg/default.jpg",
          "width": 120,
          "height": 90
        },
        "medium": {
          "url": "https://i.ytimg.com/vi/ltmO9XQVdSg/mqdefault.jpg",
          "width": 320,
          "height": 180
        },
        "high": {
          "url": "https://i.ytimg.com/vi/ltmO9XQVdSg/hqdefault.jpg",
          "width": 480,
          "height": 360
        },
        "standard": {
          "url": "https://i.ytimg.com/vi/ltmO9XQVdSg/sddefault.jpg",
          "width": 640,
          "height": 480
        },
        "maxres": {
          "url": "https://i.ytimg.com/vi/ltmO9XQVdSg/maxresdefault.jpg",
          "width": 1280,
          "height": 720
        }
      },
      "channelTitle": "Redlist - Las Mejores Canciones",
      "playlistId": "PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N",
      "position": 0,
      "resourceId": {
        "kind": "youtube#video",
        "videoId": "ltmO9XQVdSg"
      },
      "videoOwnerChannelTitle": "CTanganaVEVO",
      "videoOwnerChannelId": "UCPTQlbt5SZO_SpYvC4Ygl-A"
    }
  },
  {
    "kind": "youtube#playlistItem",
    "etag": "4oVVxxoagCYATigtGVg53WXm2ak",
    "id": "UEwtUFhLYjVqU2p3YlUwd3pBdUVvb0J2a1o5am5tWFI3Ti5BRDA1REM4NDZFOEZFOEZF",
    "snippet": {
      "publishedAt": "2021-04-16T05:51:54Z",
      "channelId": "UCn3uYZIYTMSvJraGKW2Blhw",
      "title": "Omar Montes, Ana Mena, Maffio - Solo",
      "description": "“Familia, espero que os guste mi nuevo video “Solo” con mi hermanita Ana Mena y mi amigo Maffio y que todos lo bailéis y mandéis a todos y todas pa´ la Isla de las Tentaciones!!!! OS CAMELO”nnOMAR MONTESnIG: https://www.instagram.com/omarmontesofficial/nFB: https://www.facebook.com/omarmontessr/nYOUTUBE: https://www.youtube.com/channel/UC-1BnbAPgInTpJiEi3z2d4A?sub_confirmation=1nnnMusic video by Omar Montes, Ana Mena, Maffio performing Solo. (C) 2021 Sony Music Entertainment España, S.L.",
      "thumbnails": {
        "default": {
          "url": "https://i.ytimg.com/vi/u12F1RY3WJQ/default.jpg",
          "width": 120,
          "height": 90
        },
        "medium": {
          "url": "https://i.ytimg.com/vi/u12F1RY3WJQ/mqdefault.jpg",
          "width": 320,
          "height": 180
        },
        "high": {
          "url": "https://i.ytimg.com/vi/u12F1RY3WJQ/hqdefault.jpg",
          "width": 480,
          "height": 360
        }
      },
      "channelTitle": "Redlist - Las Mejores Canciones",
      "playlistId": "PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N",
      "position": 1,
      "resourceId": {
        "kind": "youtube#video",
        "videoId": "u12F1RY3WJQ"
      },
      "videoOwnerChannelTitle": "OmarMontesVEVO",
      "videoOwnerChannelId": "UCC9RzPoJumhh839VKwGBy6Q"
    }
  },
  {
    "kind": "youtube#playlistItem",
    "etag": "5zp32QT_yZ4pGN90Y7OKL2weCYU",
    "id": "UEwtUFhLYjVqU2p3YlUwd3pBdUVvb0J2a1o5am5tWFI3Ti42OTMwOTQzM0Q0ODU3QkFC",
    "snippet": {
      "publishedAt": "2021-06-04T19:39:36Z",
      "channelId": "UCn3uYZIYTMSvJraGKW2Blhw",
      "title": "BRYAN BAUTISTA - PARA MÍ (Official Video)",
      "description": "",
      "thumbnails": {
        "default": {
          "url": "https://i.ytimg.com/vi/cU_JGIuYsi0/default.jpg",
          "width": 120,
          "height": 90
        },
        "medium": {
          "url": "https://i.ytimg.com/vi/cU_JGIuYsi0/mqdefault.jpg",
          "width": 320,
          "height": 180
        },
        "high": {
          "url": "https://i.ytimg.com/vi/cU_JGIuYsi0/hqdefault.jpg",
          "width": 480,
          "height": 360
        },
        "standard": {
          "url": "https://i.ytimg.com/vi/cU_JGIuYsi0/sddefault.jpg",
          "width": 640,
          "height": 480
        },
        "maxres": {
          "url": "https://i.ytimg.com/vi/cU_JGIuYsi0/maxresdefault.jpg",
          "width": 1280,
          "height": 720
        }
      },
      "channelTitle": "Redlist - Las Mejores Canciones",
      "playlistId": "PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N",
      "position": 2,
      "resourceId": {
        "kind": "youtube#video",
        "videoId": "cU_JGIuYsi0"
      },
      "videoOwnerChannelTitle": "Bryan Bautista",
      "videoOwnerChannelId": "UCxCwpWTTehfcG0wmleUrReg"
    }
  },
  {
    "kind": "youtube#playlistItem",
    "etag": "t2UOHEo3irk0z4ollZOzB1H3eHE",
    "id": "UEwtUFhLYjVqU2p3YlUwd3pBdUVvb0J2a1o5am5tWFI3Ti41RUJCMkQ1ODk1RkI4NDg1",
    "snippet": {
      "publishedAt": "2021-05-14T19:46:26Z",
      "channelId": "UCn3uYZIYTMSvJraGKW2Blhw",
      "title": "Juhn, Jay Wheeler - Fragancia (Official Video)",
      "description": "Juhn, Jay Wheeler - Fragancia (Official Video)nEncuéntrala en todas las plataformas: https://juhn.lnk.to/FraganciaYDnnSigue a Juhnn➖ Facebook: https://smarturl.it/Juhn_fbn➖ Instagram: https://smarturl.it/Juhn_ign➖ YouTube: https://smarturl.it/Juhn_ytn➖ Spotify: https://smarturl.it/Juhn_spnnLyrics/LetrannNo sé que hago buscándotenSi nadie me dice en donde estasnTu recuerdo jugando con mi mentenCuando te tengo, ahí mismo tú te vasnPero ya yo lo entendí nNo siempre en la vida uno tiene lo que quierenTal vez no eras para minPero si supieras lo loco que me tienesnnNo hay quien te sustituyanDesde que tu olor en mi cama me dejastenTan rico me lo hicistenQue por siempre en mi mente te quedastennNo hay quien te sustituyanDesde que tu olor en mi cama me dejastenTan rico me lo hicistenQue por siempre en mi mente te quedastennBebecita, yo no olvido la fragancia de tu olornEl primer polvo fue riconY el segundo fue mejornY tú...nComo media me virastenAbusadora, te subiste y no bajastenDe la machina, nEmpieza otro siempre que terminanQue le hablen sucio, dice que eso le fascinanDe una mujer así, dime quien se olvidannY no te niego que detrás tengo unas cuantasnPero eres tú la que me dominas y me encantasnLa que se lo lleva completo a la gargantanSoy egoísta, no pidas que te compartanSi tú sabes quennEse cuerpito tuyo es míonAunque yo no te hice mujernYo sé bien que te acuerdas de minEn donde quiera que estésnnNo hay quien te sustituyanDesde que tu olor en mi cama me dejastenTan rico me lo hicistenQue por siempre en mi mente te quedastennNo hay quien te sustituyanDesde que tu olor en mi cama me dejastenTan rico me lo hicistenQue por siempre en mi mente te quedastennTe veo por TwitternY rápido me da con escribirte indirectasnSinPuedo tener otros culosnPero pa' mi tú siempre serás la correctanY, si me dejan como Pina, te comprometonY es que me enchulo ma' cada vez que te lo metonBaby yo soy tuyo completonPensándote no me puedo estar quietonNo, No, No...nnTe llamo pero no contestasnDime si todavía estas dispuestanMi cama no es la misma si tú no te acuestasnY sigo aquí...nnTe llamo pero no contestasnDime si todavía estas dispuestanMi cama no es la misma si tú no te acuestasnnNo hay quien te sustituyanDesde que tu olor en mi cama me dejastenTan rico me lo hicistenQue por siempre en mi mente te quedastennNo hay quien te sustituyanDesde que tu olor en mi cama me dejastenTan rico me lo hicistenQue por siempre en mi mente te quedastennLa voz favorita babynEste ES Juhn nJay Wheeler Jay WheelernEl All StarnJay Wheeler Jay WheelernBabynnHoy ando con Jay WheelernLas estrellas siempre andan juntasnUstedes lo saben yanMontana The ProducernJonnielnNosotros tenemos la coneccion directa con Willy WonkanLos dulces están de este laonn#Juhn #JayWheeler #Fragancia",
      "thumbnails": {
        "default": {
          "url": "https://i.ytimg.com/vi/vN8un8VoPoQ/default.jpg",
          "width": 120,
          "height": 90
        },
        "medium": {
          "url": "https://i.ytimg.com/vi/vN8un8VoPoQ/mqdefault.jpg",
          "width": 320,
          "height": 180
        },
        "high": {
          "url": "https://i.ytimg.com/vi/vN8un8VoPoQ/hqdefault.jpg",
          "width": 480,
          "height": 360
        },
        "standard": {
          "url": "https://i.ytimg.com/vi/vN8un8VoPoQ/sddefault.jpg",
          "width": 640,
          "height": 480
        },
        "maxres": {
          "url": "https://i.ytimg.com/vi/vN8un8VoPoQ/maxresdefault.jpg",
          "width": 1280,
          "height": 720
        }
      },
      "channelTitle": "Redlist - Las Mejores Canciones",
      "playlistId": "PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N",
      "position": 3,
      "resourceId": {
        "kind": "youtube#video",
        "videoId": "vN8un8VoPoQ"
      },
      "videoOwnerChannelTitle": "Juhn",
      "videoOwnerChannelId": "UCTeE0q8xCsbCBL4npUWDPFg"
    }
  },
  {
    "kind": "youtube#playlistItem",
    "etag": "9me0qaU5MYsZOaBTIqwnxgBpqP4",
    "id": "UEwtUFhLYjVqU2p3YlUwd3pBdUVvb0J2a1o5am5tWFI3Ti4xQTlCRURGNEY0QUEyODdD",
    "snippet": {
      "publishedAt": "2021-06-04T19:39:36Z",
      "channelId": "UCn3uYZIYTMSvJraGKW2Blhw",
      "title": "Nobeat, KHEA - Medio Crazy (Official Video)",
      "description": "Nobeat, KHEA - Medio Crazy (Official Video)nnEncuéntrala en todas las plataformas https://Nobeat.lnk.to/mediocrazyIDnnSigue a Nobeat: nInstagram: https://www.instagram.com/nobeat/ nTwitter: https://twitter.com/nobeatmusic nFacebook: https://www.facebook.com/nobeatmusicnMailing List: https://Nobeat.lnk.to/MailingListIDnnnLyrics/LetranYa NobeatnSon of Godn nSé que te pasa igual que yonte han roto el corazónnAmigos pocos los que sonnNo sé  ni lo que somos pero sobra la pasiónnTú eres la que manda siempre te doy la razónn nTe dedico esta canciónnPa’ que veas que yonMe pongo romántico de vez en cuandonMe encanta ver la cara que pones cuando dicesnTú solito no te mandas ayn nTú eres como medio crazynPero mejor que muchas por ahínQue delicia como bailas pam pam pamnEl booty te hace asín nTú eres como medio crazynPero mejor que muchas por ahínQue delicia como bailas pam pam pamn nEs una loca pero ya no me manda snapnAhora la tengo bailando como Addison RaenSe convirtió en mi favorito snacknCuando está estresada soy su spanSiempre que le caigonSe la encesto como MichaelnElla es medio psycho y hace lo que quierenCon ese booty me distraigonSabe lo que tiene todo naturalnParece que te hicieron pa’ minNo paramos de hablar desde que te conocínComo Ester Expósito tu eres elitenTodos quieren tirarte pero son Mr. Beann nY dale muévelo abusalonTú tienes poderes así que úsalosnBaby excusas nonPor favornTratando de entenderte me graduén nPorque yeahn nTu eres medio crazynPero mejor que muchas por ahínQue delicia como baila pam pam pamnEl booty te hace asín nTú eres como medio crazynPero mejor que muchas por ahínQue delicia como bailas pam pam pamn nElla no juega call of duty pero siempre me matanHeadshotnQue rica que está no es intensanMedio crazy no es fácil entenderlanEs como el algebra de Baldor heynNi si fueras un meme te compartonTú no eres segundo platonBaby please no me preguntes por mi ex no non nNo invoques a VoldemortnSi confías baby todo es más sencillonA mi no me preocupan los demásnYo los piso y los apago como un cigarrillonY dale muévelo abúsalonTú tienes poderes así que úsalosnBaby excusas no por favornTratando de entenderte me gradué porquen nTú eres como medio crazynPero mejor que muchas por ahínQue delicia como bailas pam pam pamnEl booty te hace asínTú eres com medio crazynPero mejor que muchas por ahínQue delicia como baila pam pam pamnEl booty te hace asín nKHEAnYoung Flex Argentina en la casanYeahnNobeatnDimelo KHEAnNobeatn2080’snn#Nobeat #KHEA #MedioCrazy",
      "thumbnails": {
        "default": {
          "url": "https://i.ytimg.com/vi/eBwb5BA-stw/default.jpg",
          "width": 120,
          "height": 90
        },
        "medium": {
          "url": "https://i.ytimg.com/vi/eBwb5BA-stw/mqdefault.jpg",
          "width": 320,
          "height": 180
        },
        "high": {
          "url": "https://i.ytimg.com/vi/eBwb5BA-stw/hqdefault.jpg",
          "width": 480,
          "height": 360
        },
        "standard": {
          "url": "https://i.ytimg.com/vi/eBwb5BA-stw/sddefault.jpg",
          "width": 640,
          "height": 480
        },
        "maxres": {
          "url": "https://i.ytimg.com/vi/eBwb5BA-stw/maxresdefault.jpg",
          "width": 1280,
          "height": 720
        }
      },
      "channelTitle": "Redlist - Las Mejores Canciones",
      "playlistId": "PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N",
      "position": 4,
      "resourceId": {
        "kind": "youtube#video",
        "videoId": "eBwb5BA-stw"
      },
      "videoOwnerChannelTitle": "Nobeat",
      "videoOwnerChannelId": "UCW56a1VqbINaFC50Es_EYvg"
    }
  }
]

I can’t get it to return each video "videoId".

If anyone knows how to solve it, I will be very grateful.

Thank you.

5

Answers


  1. Instead of going to every path you can use below code :

    var json = wc.DownloadString ("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key=API_KEY&playlistId=PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N");
    JToken token = JToken.Parse(json);
    
    foreach(var c in token.Children())
      {
         var m = c.SelectToken("$.." + "videoId");
         Console.WriteLine(m);                    
       }
    
    Login or Signup to reply.
  2. You can serialize your json file through a class and pull the data in a more practical way. See the Microsoft Documentation

    Login or Signup to reply.
  3. I would highly recommend that you use the Google APIs Client Library for .NET for which you can look at samples in the dotnet folder on the official GitHub repo or alternatively parse your Json into strongly typed classess.

    The basic issue with your code is you are parsing as a JObject instead of a JArray. For details see: Difference between array and object in javascript? or Array Vs Object/

    If you intend to continue using raw json. You can parse the Json as a JArray and select the videoIds from it.

    public static List<string> ParseVideoIds()
    {
        var json = TestConstants.JsonTest;
        JArray jArray = JArray.Parse(json);
        var videoIds = jArray
            .SelectTokens("$...videoId")
            .Select(x=> x.ToString())
            .ToList();
            
        Console.WriteLine(string.Join(",", videoIds));
        return videoIds.ToList();
    }
    

    Or you can make your code more formal and use strongly type classes to deserialize your json to.

    1. You can copy json and within Visual Studio go to Edit -> Paste Special -> Paste Json as Classes enter image description here
    2. Once pasted you will have strongly type CSharp class which you can serialize and Deserialize using NewtonSoft.Json which I assume you are using from the JObject.Parse method in your question.
    3. Instead of using JObject.Parse, identify the strongly typed classes in the Rootobject properties generated from pasting your json as classes. You can then deserialize the json as that type. In this case it is simply an array of Class1[].
    4. To do the actual serializations
    var json = wc.DownloadString("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key=API_KEY&playlistId=PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N");
    var obj = JsonConvert.DeserializeObject<Class1[]>(json);
    
    1. To extract just the videoIds from the strongly typed classes:
    var videoIds = obj.Select(x => x.snippet.resourceId.videoId).ToList();
    

    Putting it all together:

    public static List<string> ParseVideoIds(string url)
    {
        var json = wc.DownloadString(url);
        var obj = JsonConvert.DeserializeObject<Class1[]>(json);
        var videoIds = obj.Select(x => x.snippet.resourceId.videoId).ToList();
        Console.WriteLine(string.Join(",", videoIds));
        return videoIds.ToList();
    }
    

    For reference, here are the class generated using Paste Json as Classes:

    public class Rootobject
    {
        public Class1[] Property1 { get; set; }
    }
    
    public class Class1
    {
        public string kind { get; set; }
        public string etag { get; set; }
        public string id { get; set; }
        public Snippet snippet { get; set; }
    }
    
    public class Snippet
    {
        public DateTime publishedAt { get; set; }
        public string channelId { get; set; }
        public string title { get; set; }
        public string description { get; set; }
        public Thumbnails thumbnails { get; set; }
        public string channelTitle { get; set; }
        public string playlistId { get; set; }
        public int position { get; set; }
        public Resourceid resourceId { get; set; }
        public string videoOwnerChannelTitle { get; set; }
        public string videoOwnerChannelId { get; set; }
    }
    
    public class Thumbnails
    {
        public Default _default { get; set; }
        public Medium medium { get; set; }
        public High high { get; set; }
        public Standard standard { get; set; }
        public Maxres maxres { get; set; }
    }
    
    public class Default
    {
        public string url { get; set; }
        public int width { get; set; }
        public int height { get; set; }
    }
    
    public class Medium
    {
        public string url { get; set; }
        public int width { get; set; }
        public int height { get; set; }
    }
    
    public class High
    {
        public string url { get; set; }
        public int width { get; set; }
        public int height { get; set; }
    }
    
    public class Standard
    {
        public string url { get; set; }
        public int width { get; set; }
        public int height { get; set; }
    }
    
    public class Maxres
    {
        public string url { get; set; }
        public int width { get; set; }
        public int height { get; set; }
    }
    
    public class Resourceid
    {
        public string kind { get; set; }
        public string videoId { get; set; }
    }
    

    As noted, you can disregard Rootobject.

    Additionally, feel free to refactor Class1 (or any of the other classes or Rootobject when using Json of a different schema) to something more intuitive. For example:

    public class YouTubePlayListItem
    {
        public string kind { get; set; }
        public string etag { get; set; }
        public string id { get; set; }
        public Snippet snippet { get; set; }
    }
    
    

    With that refactoring you would have:

    public static List<string> ParseVideoIds(string url)
    {
        var json = wc.DownloadString(url);
        var obj = JsonConvert.DeserializeObject<YouTubePlayListItem[]>(json);
        var videoIds = obj.Select(x => x.snippet.resourceId.videoId).ToList();
        Console.WriteLine(string.Join(",", videoIds));
        return videoIds.ToList();
    }
    

    For Net 5.0, the Microsoft Documentation outlines in more detail what is described above, as pointed out in the answer from Gökdeniz Çetin

    Login or Signup to reply.
  4. You can use JSON Path to get the video id.

    Token to fetch all video id is $...videoId.

    Check this fiddle – https://dotnetfiddle.net/nyngkK

    You can use this portal to validate the JSON path token – https://jsonpath.com/

    The below code demostrates the whole program which returns the output as

    ltmO9XQVdSg
    u12F1RY3WJQ
    cU_JGIuYsi0
    vN8un8VoPoQ
    eBwb5BA-stw
    

    Code

    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
                        
    public class Program
    {
        public static void Main()
        {
            RunTest().GetAwaiter().GetResult();
            Console.WriteLine("Hello World");
        }
        
        public async static Task RunTest()
        {
            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                var response = await client.GetAsync("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key=<<Your Key>>&playlistId=PL-PXKb5jSjwbU0wzAuEooBvkZ9jnmXR7N");
                var content = await response.Content.ReadAsStringAsync();
                
                Console.WriteLine(content);
                
                JObject jObject = JObject.Parse(content);
                var videoIds = jObject.SelectTokens("$...videoId");
                foreach (var videoId in videoIds)
                {
                    Console.WriteLine(videoId.Value<string>());
                }
            }
        }
    }
    
    Login or Signup to reply.
  5. the returned json from youtube is a array so you must convert that with JArray

    its worked with your json

    using System.IO;
    using Newtonsoft.Json.Linq;
    using System;
    
    class program
    {
        static string json = File.ReadAllText("json.json");
        static void Main(string[] args)
        {
            dynamic data = JArray.Parse(json);
            foreach (dynamic dynamic in data)
                Console.WriteLine(dynamic.snippet.resourceId.videoId);
            Console.ReadKey();
        }
    }
    

    for understand what is returned json use this website

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search