2011-11-11 104 views
4

我一直在項目中成功使用json.NET一段時間沒有任何問題。昨天晚上,我遇到了我的第一個案例,json.NET崩潰試圖解析從可靠來源返回的json數據:twitter API。json.NET與twitter API數據解析問題

具體來說,這個代碼導致錯誤:

string sCmdStr = String.Format("https://api.twitter.com/1/users/lookup.json?screen_name={0}", sParam); 
string strJson = _oauth.APIWebRequest("GET", sCmdStr, null); 
JObject jsonDat = JObject.Parse(strJson); 

在我的情況下sParam字符串包含約25 Twitter的數字ID。 twitter API調用成功,但json.NET Parse調用失敗,並顯示以下錯誤:

"Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray"

有沒有其他人遇到過這種情況?有人知道任何方式嗎?直到我解決問題時,我處於一個死路。

+0

我對twitter api不太瞭解,但是源代碼應該不是很重要。你能給我們一個strJson將包含什麼的例子嗎? – Mithon

+0

是的,你可以在這裏看到一個由twitter返回的json數據的例子:http://bit.ly/t8KBba。 –

+0

@DrewStoddard如果你已經嘗試了我的答案,你會發現'JObject.Parse'有什麼問題,以及爲什麼我的Json.Net擴展類工作正常。但是,因爲看起來你不感興趣,所以我刪除了答案。 –

回答

7

我得到了完全相同的錯誤,並最終找到了答案。而不是使用JObject.Parse使用JArray.Parse。因此,您的代碼如下:

string sCmdStr = String.Format("https://api.twitter.com/1/users/lookup.json?screen_name={0}", sParam); 
string strJson = _oauth.APIWebRequest("GET", sCmdStr, null); 
JArray jsonDat = JArray.Parse(strJson); 

然後,您可以遍歷數組併爲每個單獨的推文創建jobject。

for(int x = 0; x < jsonDat.Count(); x++) 
{ 
    JObject tweet = JObject.Parse(jsonDat[x].toString()); 
    string tweettext = tweet["text"].toString(); 
    //whatever else you want to look up 
} 
+0

謝謝你。它看起來好像可以解決我們遇到的具體問題。我們在與json reader類存在幾個類似的問題之後決定在twitter API的情況下放棄json,並使用它們的XML協議。這是一個很好的決定,因爲我們已經能夠以更高的速度發展。 XML可能更加冗長,但圍繞它的成熟度和支持使它很難被擊敗。 –