2016-09-17 3 views
1

私はこれを解析しようとしています:は、ドルをbolivarの非公式為替レートで表示するAndroidアプリ用です。配列を持たないJSONファイルの解析

私はこのチュートリアルを使用しています:http://www.androidhive.info/2012/01/android-json-parsing-tutorial/これまで使用していたAPIは、私が使用していたJSON配列と子オブジェクトで構成されていました。しかし、これには文字列を持つ12個のJSONオブジェクトがあります。見られる角括弧はありません。

部分(と思う)であると私はトラブルを抱えている:私は自分でプログラミングを学ぶためにしようとしていると、私はまだ非常に新しいですので、

if (jsonStr != null) { 
    try { 
    JSONObject jsonObj = new JSONObject(jsonStr); 

    // Getting JSON Array node 
    JSONArray contacts = jsonObj.getJSONArray("contacts"); 

    // looping through All Contacts 
    for (int i = 0; i < contacts.length(); i++) { 
     JSONObject c = contacts.getJSONObject(i); 

     String id = c.getString("id"); 
     String name = c.getString("name"); 
     String email = c.getString("email"); 
     String address = c.getString("address"); 
     String gender = c.getString("gender"); 

     // Phone node is JSON Object 
     JSONObject phone = c.getJSONObject("phone"); 
     String mobile = phone.getString("mobile"); 
     String home = phone.getString("home"); 
     String office = phone.getString("office"); 
    } 
    } catch (final JSONException e) { 
     Log.e(TAG, "Json parsing error: " + e.getMessage()); 
     runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(getApplicationContext(), 
          "Json parsing error: " + e.getMessage(), 
          Toast.LENGTH_LONG) 
          .show(); 
     } 
     }); 
    } 
} 

私は、何の専門家です。しかし、私はListViewを取り除き、コードを新しいJSONに適合させるなどいくつかの変更を加えました。

if (jsonStr != null) { 
    try { 
    JSONObject jsonObj = new JSONObject(jsonStr); 

    // Getting JSON Object node 
    JSONObject c = jsonObj.getJSONObject("USD"); 
    JSONObject d = jsonObj.getJSONObject("EUR"); 

    String usdtrans = c.getString("dolartoday"); 
    String usdreal = c.getString("efectivo_real"); 
    String usddicom = c.getString("sicad2"); 
    String eurtrans = d.getString("dolartoday"); 
    String eurreal = d.getString("efectivo_real"); 
    String eurdicom = d.getString("sicad2"); 
    } 
    } catch (final JSONException e) { 
     Log.e(TAG, "Json parsing error: " + e.getMessage()); 
     runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(getApplicationContext(), 
         "Json parsing error: " + e.getMessage(), 
         Toast.LENGTH_LONG) 
         .show(); 
     } 
     }); 
    } 
} 

コードがコンパイルされない、とAndroid Studioは"unhandled exception: org.json.JSONException"を検出します。これを変更するにはどうすればよいですか?

ご協力いただければ幸いです。私のコードの残りの部分にも他の問題がありますが、私はこの問題を解決することができれば、それらを並べ替えることができます。

+0

Gson /ジャクソンのような他のライブラリを使用する必要があります。 –

+0

json: '' dolartoday ":1026.13'、 コード:' String usdtrans = c.getString( "dolartoday"); ' そのjsonの値はStringではありません。それは倍です。 getStringを指定すると、エラーになります。 –

+0

いいえ、それはできません。ダブル値は文字列に変換され、返されます –

答えて

0

org.jsonライブラリクラスを使用しているときに、JSON応答が角括弧 "["で構成される場合、その要素をJSONArrayとして取得し、JSONObjectとして取得する必要があります。

try { 
     JSONObject jsonObject = new JSONObject(jsonString); 

     JSONObject antibloqueo = jsonObject.getJSONObject("_antibloqueo"); 
     JSONObject labels = jsonObject.getJSONObject("_labels"); 
     JSONObject timestamp = jsonObject.getJSONObject("_timestamp"); 
     JSONObject USD = jsonObject.getJSONObject("USD"); 
     JSONObject EUR = jsonObject.getJSONObject("EUR"); 
     JSONObject COL = jsonObject.getJSONObject("COL"); 
     JSONObject GOLD = jsonObject.getJSONObject("GOLD"); 
     JSONObject USDVEF = jsonObject.getJSONObject("USDVEF"); 
     JSONObject USDCOL = jsonObject.getJSONObject("USDCOL"); 
     JSONObject EURUSD = jsonObject.getJSONObject("EURUSD"); 
     JSONObject BCV = jsonObject.getJSONObject("BCV"); 
     JSONObject MISC = jsonObject.getJSONObject("MISC"); 


     //To get Values From antibloqueo 
     String mobile = antibloqueo.getString("mobile"); 
     String video = antibloqueo.getString("video"); 


     //To get Values From labels 
     String a = labels.getString("DOLARTODAY"); 
     String a1 = labels.getString("a1"); 


    } catch (JSONException e) { 
     Log.e("TAG", "Json parsing error: " + e.getMessage()); 
    } 

注: 小規模なプロジェクトで作業している間、あなたがJSONコンバータとしてライブラリをorg.json使用することができます。大きなプロジェクトでは、あなたがあなたの第二のコードで `キャッチ(最終JSONException電子)`の前に不必要な中括弧を得た

https://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

+0

素晴らしい、私はその部分を整理しましたが、今は私が以前持っていなかったいくつかのエラーがあります。 新しいコードのすぐ下にエラーが表示されても、それ以外の場合は表示されません。私がチェックしてから何が間違っているのか分かりません。はい、あります。 また、onPostExecute変数で「シンボル結果を解決できません」というメッセージが表示されます。私がコメントにコードを貼り付けることができるかわからない –

+0

http://www.paste.orgを使ってコードを貼り付けてください – Pandiarajan

+0

長い間、申し訳ありませんが、ここはそれです:http://www.paste.org/81498 私はこのチュートリアルのコードをベースにしています:http://www.androidhive.info/2012/01/android-json-parsing-tutorial/。コードを解析してListViewにします。私は2つの単純なTextViewsにコードを解析したいので、私はListViewをしたくないので、私はそれを削除しようとしました。これが私がエラーが出ていると思う理由です。ご協力いただきありがとうございます! –