2016-08-16 15 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

あなたの質問は、あなたがベース-64/ACTからURLをデコードしようとしている理由を指定していません。 encodeTopicTypeURLは普通の文字列ですが、以下のように直接使用しないでください。

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"); 
    } 
} 

あなたが実際にそのbase64でエンコードされた表現のオフURLを取得する必要がある場合は、この

var encodedTopicTypeURL ="aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vcmcvcmVwbzEvY29udGVudHMvc2FtcGxlLmpzb24="; 

で次の行を置き換え

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

decodedTopicTypeURLが実際にURLを持つことになります。この方法値。

あなたはBase64エンコーディング/デコーディング

1

https://api.github.com/repos/org/repo1/contents/sample.json Base64でエンコードされた文字列ではありません。これは、Base64表現は、あなたがデータをダウンロードし、あなたは(私はそれがJOBJECTにそれを解析取得するためにDownloadData(string url)を使用し、文字列変数にそれを持っているとき、それは値取ると、内部のコンテンツを探すことができます aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vcmcvcmVwbzEvY29udGVudHMvc2FtcGxlLmpzb24=

あるのです

たとえば、次のとおりです。

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

で遊ぶためにthisサイトを使用することができますはい、私はGitHubの中にJSONファイルのURL内のBase64表現を参照してください。文字列ではないことがわかったら、値をチェックするためにキーにアクセスするためにJSONを正しくデコードする方法を知りたいと思います。これを行う方法を示すURLまたは上記の質問とコードに基づくコードサンプルがある場合。 – DBS

関連する問題