C # проблема со строкой json, если значение равно нулю - PullRequest
0 голосов
/ 28 декабря 2011

Я использую следующий код:

if (e.Data.MessageArray[0] == "!streams")
{
  try
  {
    WebClient webclient = new WebClient();
    var data = webclient.DownloadString("http://api.justin.tv/api/stream/list.json?channel=dotademon");
    JArray ja = JArray.Parse(data);

    WebClient webclient2 = new WebClient();
    var data2 = webclient2.DownloadString("http://api.justin.tv/api/stream/list.json?channel=trixilulz");
    JArray ja2 = JArray.Parse(data2);

    WebClient webclient3 = new WebClient();
    var data3 = webclient3.DownloadString("http://api.justin.tv/api/stream/list.json?channel=thepremierleague");
    JArray ja3 = JArray.Parse(data3);

    string streamingString = "Live right now: ";
    streamingString += (char)3 + "03EG.Demon" + (char)15 + " - " + "Viewers: " + ja[0]["channel_count"] + " - " + "http://www.justin.tv/dotademon" + (char)3 + "03 Mouz.Trixi" + (char)15 + " - " + "Viewers: " + ja2[0]["channel_count"] + " - " + "http://www.justin.tv/trixilulz" + (char)3 + "03 The Premier League" + (char)15 + " - " + "Viewers: " + ja3[0]["channel_count"] + " - " + "http://www.justin.tv/thepremierleague";
    irc.SendMessage(SendType.Message, e.Data.Channel, streamingString);

    Console.WriteLine("EG.Demon is " + ja[0]["format"]);
    Console.WriteLine("Mouz.Trixi is " + ja[2]["format"]);
    Console.WriteLine("The Premier League is " + ja[3]["format"]);
  }
  catch (ArgumentOutOfRangeException)
  {
    //catch something
  }
}

Однако, если один из потоков не подключен, он не выводит эту строку вообще.Даже если 2 в сети, а 1 в автономном режиме и наоборот.Однако, если все они подключены к сети, он выводит его правильно, как:

Live right now: EG.Demon - Viewers: 164 - http://www.justin.tv/dotademon Mouz.Trixi - Viewers: 49 - http://www.justin.tv/trixilulz The Premier League - Viewers: 2992 - http://www.justin.tv/thepremierleague

Чтобы продемонстрировать это с выводом на консоль, вот этот код, он, по сути, делает то же самое, что и код выше, ноотправляет его на консоль, но та же проблема очевидна:

using System;
using System.Net;
using Newtonsoft.Json.Linq;

namespace Test
{
  class Program
  {
    static void Main(string[] args)
    {
      try
      {
        WebClient webclient = new WebClient();
        var data = webclient.DownloadString("http://api.justin.tv/api/stream/list.json?channel=dotademon");
        JArray ja = JArray.Parse(data);

        WebClient webclient2 = new WebClient();
        var data2 = webclient2.DownloadString("http://api.justin.tv/api/stream/list.json?channel=trixilulz");
        JArray ja2 = JArray.Parse(data2);

        WebClient webclient3 = new WebClient();
        var data3 = webclient3.DownloadString("http://api.justin.tv/api/stream/list.json?channel=thepremierleague");
        JArray ja3 = JArray.Parse(data3);

        string streamingString = "Live right now: ";
        streamingString += (char)3 + "03EG.Demon" + (char)15 + " - " + "Viewers: " + ja[0]["channel_count"] + " - " + "http://www.justin.tv/dotademon" + (char)3 + "03 Mouz.Trixi" + (char)15 + " - " + "Viewers: " + ja2[0]["channel_count"] + " - " + "http://www.justin.tv/trixilulz" + (char)3 + "03 The Premier League" + (char)15 + " - " + "Viewers: " + ja3[0]["channel_count"] + " - " + "http://www.justin.tv/thepremierleague";
        Console.WriteLine(streamingString);
      }
      catch (ArgumentOutOfRangeException)
      {
        //do something
      }
    }
  }
}
Live right now: EG.Demon - Viewers: 164 - http://www.justin.tv/dotademon Mouz.Trixi - Viewers: 49 - http://www.justin.tv/trixilulz The Premier League - Viewers: 2992 - http://www.justin.tv/thepremierleague

Мой вопрос: как я могу использовать это как строку, но выводить ее все еще, если она подключена, и не выводить остальные, если она отключена?,Когда хотя бы один из них находится в автономном режиме, он вообще не выводит его.Он проверяет, находится ли он в сети, если он находит channel_count в json, потому что если он не в сети, файл json ничего не содержит, просто [].Это единственный известный мне способ проверить, подключен ли он к сети или нет.Кстати, я использую JSON.Net.

1 Ответ

1 голос
/ 28 декабря 2011

Вы можете проверить ja.Count, чтобы увидеть, получили ли вы ответ.

var sb = new StringBuilder("Live right now: ");
if (ja.Count > 0)
  sb.Append(string.Format("EG.Demon - Viewers: {0} - http://www.justin.tv/dotademon", ja[0]["channel_count"]));
if (ja2.Count > 0)
  //...
if (ja3.Count > 0)
  //...

irc.SendMessage(SendType.Message, e.Data.Channel, sb.ToString());
...