从网页解析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");
答
JSON解析非常简单。阅读JSONObjects和JSONArray。这是我最近发现的东西。它非常简短,没有太多的解释。 (我打算纠正一个教程,我很快就会写)。一旦完成,我会在这里发布一个链接。然后检查这个链接。可能有帮助。
答
这是不漂亮,但如果你在忙乱之中......
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;
通过链接去。希望能帮助到你。 :D谢谢! – Exorcist 2012-03-24 18:21:51
@Exorcist是否有帮助? – 2012-03-24 18:41:54
不,还在经历。太多阅读。现在,尝试tjb给出的代码,但之后会再次通过链接。 – Exorcist 2012-03-24 18:56:39