2011-02-02 5 views
2

私は非常に多くの投稿を読んできましたが、1つの結果または結果の配列を持つ結果セットを処理する方法を見つけたり、理解することができません。 (ヤフー検索から)JSONでYahoo検索結果を解析するのに役立つ

複数の結果を受け取った場合は結果を完全に解析できますが、検索結果が1つしかない場合はJSONExceptionが表示されます。blahblahbalhはJSONArrayではありません。複数の結果がある場合

JSONArray results = resultObject.getJSONArray("Result"); 

が正常に動作しますが、どのように私は1つだけ、結果はヤフークエリそこから返された結果として、それを受け入れるために、組み込みのJSONパーサー強制することができますか?

この単一の結果はJSON配列を解析するために失敗します。

{ 
    "ResultSet": { 
    "totalResultsAvailable": "108", 
    "totalResultsReturned": "1", 
    "firstResultPosition": "1", 
    "ResultSetMapUrl": "http:\/\/maps.yahoo.com\/broadband\/?q1=Virginia+Beach%2C+VA+23454-4608tt=mexicantp=1", 
    "Result": { 
     "id": "12811175", 

    } 
    } 
} 

しかし、これはうまくJSONArrayに解析します。

{ 
    "ResultSet": { 
    "totalResultsAvailable": "108", 
    "totalResultsReturned": "2", 
    "firstResultPosition": "1", 
    "ResultSetMapUrl": "http:\/\/maps.yahoo.com\/broadband\/?q1=Virginia+Beach%2C+VA+23454-4608tt=mexicantp=1", 
    "Result": [ 
     { 
     "id": "12811175", 

     }, 
     { 
     "id": "12814560", 
     } 
    ] 
    } 
} 

申し訳ありませんが、私はせせらぎんだけど、それは私その狂気私を運転だ場合最初の結果の例から、長さ1のJSONArrayを取得する方法を理解できません。

ありがとうございます!

答えて

1

これはJSOnを使用する際の問題の1つです。 2つのオブジェクトがJSONArrayと見なされている場合、それ以外のオブジェクトはJSONObjectとみなされます。

私が知っている限り、あなたはどちらかとしてそれに応じてコードすることができると仮定する必要があります。あなたはtotalResultsReturned場合== 1を確認したい

JSONArray getArrayOrObject(JSONObject parent, String name) { 
    JSONArray results = parent.optJSONArray(name); 
    if (results == null) { 
     results = new JSONArray(); 
     JSONObject object = parent.optJSONObject("Result"); 
     if (object != null) { 
     results.put(object); 
     } 
    } 
    return results; 
    } 
+0

完了!私は、配列を作成し、必要に応じてそのオブジェクトにオブジェクトを埋め込むことが決して私の頭を越えたことはないのか分かりません。どうもありがとうございます! –

+0

VB Gladの@Daveを参考にしてください。この回答または他の回答があなたを助けた場合は、その人にアップヴォートを与え、その隣にあるチェックボックスをオンにして、「正しい」回答としてマークしてください。 –

0

それがある場合は、あなたの代わりに.getJSONObject(「結果」)を使用して、JSONArrayを構築する必要がありますようにあなたはヘルパー関数で乱雑詳細をラップすることができそのオブジェクトを最初の値(http://www.json.org/javadoc/org/json/JSONArray.html)として使用します。

おそらく、結果が0の場合も処理しているはずです。

+0

ありがとうライアン。はい、これはMayraが提供したヘルパーと一緒に完全に動作します。それは私の答えをStackoverflowに戻って来るあなたを2つのような人々です! –

関連する問題