1

私は外部 API に接続しています。これは (パラメーターが与えられた場合)、JSON で結果セットを出力します。目的は、この JSON を読み取り可能な値に変換し、それらをオブジェクト配列に追加することです。これは UWP アプリであるため、インターネットで見つけた古いライブラリの一部は利用できなくなりました。以下は、JSON を取得して解析を試みるコード ブロックです。

private void beginWork()
{
    string feed_data = getFeed().Replace(@"\", "").Trim(new char[1] { '"' });
    Debug.WriteLine(feed_data); // <-- THIS PRINTS OUT THE CORRECTLY FORMATTED JSON WITHOUT ANY ESCAPE CHARACTERS
    JsonObject obj = JsonObject.Parse(feed_data); // <-- THROWS AN "INVALID JSON ERROR HERE" AND VALUE OF VARIABLE IN AUTOS SHOWS JSON DATA WITH ESCAPE CHARACTERS AND ADDITIONAL QUOTATION MARKS BEFORE AND AFTER THE STRING
}

private string getFeed()
{
    HttpClient client = new HttpClient();
    string url = "URL HERE";
    HttpResponseMessage response = client.GetAsync(url).Result;
   return response.Content.ReadAsStringAsync().Result;
}

それで、ここで何がうまくいかないのですか?行が実行されると、Debug.WriteLine(feed_data);出力コンソールに有効な JSON が表示されますが、それでも解析エラーが発生します。


編集: JSON の例 (予想され、コンソールに表示されるもの):

[{"id":"884","author":"795","title":"The sum of ages of 5 children born at the intervals of 3 years each is 50 years. What is the age of the youngest child?","details":" ","datetime":"1439099443","answered":"1","vote":"0","answers":[{"id":"884","author":"788","answer":"4 years","datetime":"1439165670","votes":"0"}]}]

vs Autos ウィンドウの JSON と、解析に失敗したもの:

"[{\"id\":\"884\",\"author\":\"795\",\"title\":\"The sum of ages of 5 children born at the intervals of 3 years each is 50 years. What is the age of the youngest child?\",\"details\":\" \",\"datetime\":\"1439099443\",\"answered\":\"1\",\"vote\":\"0\",\"answers\":[{\"id\":\"884\",\"author\":\"788\",\"answer\":\"4 years\",\"datetime\":\"1439165670\",\"votes\":\"0\"}]}]"

4

1 に答える 1

1

JSON 文字列は、JSON オブジェクトではなく JSON 配列を表します。JSON.NET を使用して (UWP でテストするための開発環境がありません) を実行すると同じエラーが発生しましたがJObject.Parse(feed_data)、を使用して修正できますJArray.Parse(feed_data)。したがって、UWP では、同等のソリューションが次のものを使用することを強く疑っていますJsonArray.Parse()

JsonArray arr = JsonArray.Parse(feed_data); 
于 2015-08-09T04:56:49.373 に答える