2016-08-16 115 views
0

我想使用存儲在GitHub倉庫中的C#解碼一個簡單的json數組,以查看它是否包含值。我正在使用Newtonsoft json軟件包。我已閱讀此主題:Code for decoding/encoding a modified base64 URL,但我似乎無法實現該解決方案。我收到以下錯誤:從URL發送Base64解碼json數組

System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters

,但我認爲還有一些代碼正在進行。

​​

JSON數組:

[ 
"string1", 
"string2", 
"string3", 
"string4",    
] 

回答

1

你的問題沒有明確規定,爲什麼你想從解碼的Base-64 /法案的URL ually encodedTopicTypeURL只是一個普通的字符串,爲什麼不直接使用它如下?

var value = "somestring"; 
var url = "https://api.github.com/repos/org/repo1/contents/sample.json"; 

using (var webClient = new System.Net.WebClient()) 
{ 
    var topicTypeJson = webClient.DownloadString(url); 
    JArray validTopicTypes = JArray.Parse(topicTypeJson); 
    if (!validTopicTypes.Contains(value)) 
    { 
     Logger.LogError($"Value not found"); 
    } 
} 

如果你確實需要得到URL關閉其Base64表示的,然後用這個

var encodedTopicTypeURL ="aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vcmcvcmVwbzEvY29udGVudHMvc2FtcGxlLmpzb24="; 

這樣decodedTopicTypeURL實際上將有網址替換下面的行

var encodedTopicTypeURL ="https://api.github.com/repos/org/repo1/contents/sample.json"; 

值。

您可以使用this網站玩弄Base64編碼/解碼

1

https://api.github.com/repos/org/repo1/contents/sample.json不Base64編碼串。它的Base64表示是 aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vcmcvcmVwbzEvY29udGVudHMvc2FtcGxlLmpzb24=

您可以下載數據,當你擁有了它在字符串變量(我用DownloadData(string url)找回它,它解析到JObject,把它的值和內部查找內容

,例如:

static void Main(string[] args) 
    { 
     string url = @"https://api.github.com/"; 
     string searchString = "url"; 
     WebClient wc = new WebClient(); 
     wc.Headers.Add("user-agent", "Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 
     try 
     { 
      byte[] dat = wc.DownloadData(url); 
      string data = Encoding.ASCII.GetString(dat); 
      var values = JObject.Parse(data).Values(); 
      bool stringFound = values.Any(x => x.Path.Contains(searchString) || 
               x.Value<string>().Contains(searchString) 
             ); 
      if(stringFound) 
      { 
       Console.WriteLine("JSON contains search string"); 
      } 
     } 
     catch(Exception e) 
     { 
      throw; 
     } 

    } 

我相信通過搜索值可以做的更好(;

+0

是的,我看到在URL中GitHub的JSON文件中的Base64表示。當你聲明它不是一個字符串時,我想知道的是如何正確解碼JSON以訪問密鑰來檢查值。如果你有一個URL顯示如何做到這一點或基於我的問題和上面的代碼的代碼示例。 – DBS