2011-11-11 28 views
4

私はjson.NETをプロジェクトで問題なく使用しています。昨夜、json.NETが信頼できるソースであるべきものから返されたjsonデータを解析しようとするとクラッシュした最初のケ​​ースに遭遇しました:twitter API。twitter APIデータでjson.NET解析の問題

具体的には、このコードは、エラーが発生します。

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さえずり数値IDを含んでいました。 TwitterのAPI呼び出しが成功しましたが、json.NET解析コールは、次のエラーで失敗しました:

"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を使用します。あなたのコードは次のとおりです:

このループをループして個々のツイートごとに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

ありがとうございます。それは私たちが持っていた特定の問題を解決するかもしれないように見えます。私たちは、twson APIの場合にjsonのリーダークラスでいくつかの同様の問題を抱えて、それらのXMLプロトコルを使用することを決めました。それ以来、私たちはずっと高い開発スピードで動くことができたので、良い決定でした。 XMLはもっと冗長かもしれませんが、それを取り巻く成熟とサポートが勝つのが難しいです。 –