从网页解析JSON文件并将值存储在二维数组中

问题描述:

对于我的货币转换器应用程序我需要从网络和同伴获得最新的汇率*用户向我推荐了一个使用JSON文件格式的相同API。因为,我不知道关于JSON的一些事情,我查阅了大部分教程,可以帮助我,但是我可以创建一个JSON文件然后解析它。从网页解析JSON文件并将值存储在二维数组中

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解析器。所以,任何帮助将不胜感激。

感谢您的期待。

几天前我遇到了这个问题,并找出答案。当您通过网络请求收到它们时,您可以执行以下操作。

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); 

在你的情况,如果你想找到AUD你做

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

您应该试试谷歌图书馆Gson

Gson是一个Java库,可用于将Java对象转换为其JSON表示形式的 。它也可用于将JSON 字符串转换为等效的Java对象。

您只需要创建一个表示数据的Java Bean(您的二维数组可以是一个HashMap)。之后你只需要解析,*中有很多关于这个的例子。

您也可以试试这个link。我希望它有帮助!

+0

通过链接去。希望能帮助到你。 :D谢谢! – Exorcist 2012-03-24 18:21:51

+0

@Exorcist是否有帮助? – 2012-03-24 18:41:54

+0

不,还在经历。太多阅读。现在,尝试tjb给出的代码,但之后会再次通过链接。 – Exorcist 2012-03-24 18:56:39

JSON解析非常简单。阅读JSONObjects和JSONArray。这是我最近发现的东西。它非常简短,没有太多的解释。 (我打算纠正一个教程,我很快就会写)。一旦完成,我会在这里发布一个链接。然后检查这个链接。可能有帮助。

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

这是不漂亮,但如果你在忙乱之中......

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;