Парсинг файла JSON с веб-страницы и сохранение значений в 2d массиве

1

Для моего конвертера валют мне нужно получить последние курсы обмена от сети, а один из пользователей StackOverflow предложил мне отличный 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. Таким образом, любая помощь будет очень признательна.

Благодарим вас заранее.

Теги:

4 ответа

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

В вашем случае, если вы хотите найти AUD, который вы делаете

JSONObject aussieCurrency=finalJson.getJSONObject("AUD");
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;
0

JSON Parsing довольно прост. Прочитайте JSONObjects, а также JSONArray. Вот что я нашел недавно. Это очень короткое, без особого объяснения. (который я планирую исправить в учебнике, я скоро напишу). WIll опубликуйте ссылку здесь, как только я закончу. Затем проверьте эту ссылку. Может помочь.

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

0

Вы должны попробовать Google Library Gson.

Gson - это библиотека Java, которая может быть использована для преобразования объектов Java в их представление JSON. Его также можно использовать для преобразования строки JSON в эквивалентный объект Java.

Вам нужно будет создать Java-компонент, который представляет ваши данные (ваш 2D-массив может быть HashMap). После этого вам нужно будет только разобрать, в StackOverflow есть много примеров.

Вы также можете попробовать эту ссылку. Я надеюсь, что это помогает!

  • 0
    Переход по ссылкам. Надеюсь, это поможет. : D Спасибо!
  • 0
    @ Exorcist это помогло?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню