2012-03-24 5 views
1

私の通貨変換アプリケーションでは、ネットから最新の為替レートを取得する必要があります。また、仲間のStackOverflowユーザーがJSONファイルフォーマットを使用する素晴らしいAPIを教えてくれました。 JSONについてのことは知らなかったので、ほとんどのチュートリアルを参考にしてみましたが、JSONファイルを作成して解析するだけでした。ウェブページからJSONファイルを解析して2次元配列に値を格納する

JSONファイルが示されているようですし、簡単にするためとして、そのURLを考えることができます "のhttp://a.json" -

{ 
"disclaimer": "This data is collected from various providers and provided free of charge for informational purposes only, with no guarantee whatsoever of accuracy, validity, availability or fitness for any purpose; use at your own risk. Other than that - have fun, and please share/watch/fork if you think data like this should be free!", 
"license": "Data collected from various providers with public-facing APIs; copyright may apply; not for resale; no warranties given.", 
"timestamp": 1332601928, 
"base": "USD", 
"rates": { 
    "AED": 3.6732, 
    "AFN": 48.27, 
    "ALL": 105.459999, 
    "AMD": 387.929993, 
    "ANG": 1.79, 
    "AOA": 95.305, 
    "ARS": 4.37, 
    "AUD": 0.954928, 
    "AWG": 1.7899, 
    "AZN": 0.7863, 
    "BAM": 1.47695, 
    "BBD": 2, 
    "BDT": 81.779999, 
    "BGN": 1.482, 
    "BHD": 0.37703, 
    "BIF": 1305, 
    "BMD": 1, 
    "BND": 1.26095, 
    "BOB": 6.91, 
    "BRL": 1.8107, 
    "BSD": 1, 
    "BTN": 51.174999, 
    "BWP": 7.2751, 
    "BYR": 8050, 
    "BZD": 1.9135, 
    "CAD": 0.99838, 
    "CDF": 924.684204, 
    "CHF": 0.9083, 
    "CLF": 0.02173, 
    "CLP": 489.25, 
    "CNY": 6.3086, 
    "COP": 1760.5, 
    "CRC": 504.700012, 
    "CUP": 1, 
    "CVE": 83.32, 
    "CZK": 18.544901, 
    "DJF": 179.470001, 
    "DKK": 5.60379, 
    "DOP": 39.025002, 
    "DZD": 74.144997, 
    "EGP": 6.0377, 
    "ETB": 17.465, 
    "EUR": 0.753523, 
    "FJD": 1.7797, 
    "FKP": 0.6301, 
    "GBP": 0.63012, 
    "GEL": 1.63875, 
    "GHS": 1.7625, 
    "GIP": 0.63005, 
    "GMD": 29.700001, 
    "GNF": 7102.5, 
    "GTQ": 7.7565, 
    "GYD": 202.649994, 
    "HKD": 7.76787, 
    "HNL": 19.055, 
    "HRK": 5.6717, 
    "HTG": 41, 
    "HUF": 220.970001, 
    "IDR": 9183, 
    "IEP": 0.593507, 
    "ILS": 3.7293, 
    "INR": 51.217548, 
    "IQD": 1165.5, 
    "IRR": 12278, 
    "ISK": 126.080002, 
    "JMD": 86.699997, 
    "JOD": 0.7085, 
    "JPY": 82.345001, 
    "KES": 83.074997, 
    "KGS": 46.798801, 
    "KHR": 4005, 
    "KMF": 370.750763, 
    "KPW": 900, 
    "KRW": 1135.449951, 
    "KWD": 0.2785, 
    "KZT": 147.774994, 
    "LAK": 7988.799805, 
    "LBP": 1504.5, 
    "LKR": 130.100006, 
    "LRD": 73.510002, 
    "LSL": 7.7093, 
    "LTL": 2.6016, 
    "LVL": 0.525, 
    "LYD": 1.2616, 
    "MAD": 8.4153, 
    "MDL": 11.827, 
    "MGA": 2135, 
    "MKD": 46.52, 
    "MMK": 6.51, 
    "MNT": 1312.5, 
    "MOP": 8.00105, 
    "MRO": 294, 
    "MUR": 29.139999, 
    "MVR": 15.37, 
    "MWK": 165.998093, 
    "MXN": 12.7545, 
    "MYR": 3.077, 
    "MZN": 27.434999, 
    "NAD": 7.72, 
    "NGN": 157.699997, 
    "NIO": 23.235001, 
    "NOK": 5.75215, 
    "NPR": 80.830002, 
    "NZD": 1.221032, 
    "OMR": 0.38425, 
    "PAB": 1, 
    "PEN": 2.67, 
    "PGK": 2.0602, 
    "PHP": 42.959999, 
    "PKR": 91.910004, 
    "PLN": 3.1285, 
    "PYG": 4295, 
    "QAR": 3.6418, 
    "RON": 3.2943, 
    "RSD": 83.780502, 
    "RUB": 29.2896, 
    "RWF": 607.127014, 
    "SAR": 3.7505, 
    "SBD": 7.070963, 
    "SCR": 14.0244, 
    "SDG": 2.675, 
    "SEK": 6.7333, 
    "SGD": 1.262, 
    "SHP": 0.63005, 
    "SLL": 4359.5, 
    "SOS": 1627, 
    "SRD": 3.2875, 
    "STD": 18500, 
    "SVC": 8.7475, 
    "SYP": 57.450001, 
    "SZL": 7.7162, 
    "THB": 30.695, 
    "TJS": 4.7592, 
    "TMT": 2.8475, 
    "TND": 1.5143, 
    "TOP": 1.693601, 
    "TRY": 1.8017, 
    "TTD": 6.41865, 
    "TWD": 29.577999, 
    "TZS": 1592, 
    "UAH": 8.0265, 
    "UGX": 2495, 
    "USD": 1, 
    "UYU": 19.530001, 
    "UZS": 1839.400024, 
    "VEF": 4.2951, 
    "VND": 20856, 
    "VUV": 90.400002, 
    "WST": 2.247475, 
    "XAF": 494.334412, 
    "XCD": 2.7, 
    "XDR": 0.648628, 
    "XOF": 496.100006, 
    "XPF": 90.349998, 
    "YER": 215.604996, 
    "ZAR": 7.6874, 
    "ZMK": 5335, 
    "ZWL": 322.355011 
} 
} 

が同じのために提案してください。

これは私が考えていることです - レートを2D String配列に保存し、必要なときには同じものを取得することができます。しかし、2DのJSONArrayパーサーでは何も見つかりませんでした。だから、どんな助けでも大歓迎です。

ありがとうございます。

答えて

1

からです私は数日前にこの問題に遭遇し、それを理解しました。ウェブリクエストでそれらを受け取ったら、以下を行うことができます。あなたのケースでは

String uri="http://data.someSite.api/path/to/the/file.json";    
    HttpGet get = new HttpGet(uri); 
    HttpClient client = new DefaultHttpClient(); 
    HttpResponse response = client.execute(get); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
    StringBuilder builder=new StringBuilder(); 
    for(String line=null;(line = reader.readLine()) != null;){ 
    builder.append(line).append("\n"); 
} 
    JSONTokener jsonTokener=new JSONTokener(builder.toString()); 
    JSONObject finalJson=new JSONObject(jsonTokener); 

あなたがリンクを介して行く

JSONObject aussieCurrency=finalJson.getJSONObject("AUD"); 
0

GoogleライブラリGsonをお試しください。

Gsonは、Javaオブジェクトを JSON表現に変換するために使用できるJavaライブラリです。これは、JSON 文字列を同等のJavaオブジェクトに変換するためにも使用できます。

データを表すJava Beanを作成するだけで済みます(2D配列はHashMapでもかまいません)。その後、解析するだけで済みます。StackOverflowにはたくさんの例があります。

これも試すことができますlink私はそれが助けて欲しい!

+0

を行うAUDを検索する場合。それが役に立てば幸い。 :Dありがとう! – Exorcist

+0

@Exorcistは助けましたか? –

+0

いいえ、まだ通り抜ける。読み過ぎ。今のところ、tjbが与えたコードを試してみましょう。 – Exorcist

0

JSONの構文解析は非常に簡単です。 JSONObjectとJSONArrayについても読んでください。最近私が見つけたことがあります。あまり説明がなく、とても簡単です。 (私はチュートリアルで修正するつもりですが、私はすぐに書いていきます)。私が終わったらここにリンクを投稿します。それまで、このリンクをチェックしてください。役立つかもしれません。

http://www.jondev.net/articles/Android_JSON_Parser_Example

1

それはきれいではありませんが、あなたは急いでいる場合...

public String[][] run() { 
     // TODO Auto-generated method stub 
     java.io.InputStream r = getClass().getResourceAsStream("input.json"); 

     getClass().getResourceAsStream("input.json"); 
     Writer writer = new StringWriter(); 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(r,"UTF-8")); 
      char[] buffer = new char[1024]; 
      int n; 
      while ((n = reader.read(buffer)) != -1) { 
       writer.write(buffer, 0, n); 
       } 

      JSONObject jObj = new JSONObject(writer.toString()); 
      String rates = jObj.getString("rates"); 
      rates=rates.substring(1, rates.length()-1); 
      String[] rates2 = rates.split(","); 
      String[] rate; 
      String[][] finished = new String[rates2.length][2]; 
      for(int i=0;i<rates2.length;i++){ 
       finished[i]=rates2[i].split(":"); 
      } 
      return finished; 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 

    } 

そしてもちろんの輸入はjson.org

import org.json.JSONException; 
import org.json.JSONObject; 
関連する問題