You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSON中的货币与对应值存入ArrayList?(Android场景)

嘿,作为刚接触这个领域的新手,能自己发起REST请求拿到响应已经很棒啦!我来一步步教你怎么把这些货币和对应的汇率值存入ArrayList里~

首先,我们需要先定义一个简单的数据类,用来封装每一组“货币代码-汇率”的信息,这样存到列表里会更清晰:

public class CurrencyRate {
    private String currencyCode;
    private double rate;

    // 构造方法
    public CurrencyRate(String currencyCode, double rate) {
        this.currencyCode = currencyCode;
        this.rate = rate;
    }

    // 可选:添加getter方法,方便后续获取数据
    public String getCurrencyCode() {
        return currencyCode;
    }

    public double getRate() {
        return rate;
    }
}

接下来分两种方法给你演示解析JSON并存入ArrayList:

方法一:用Android原生的JSONObject解析(无需额外依赖)

假设你已经拿到了完整的JSON响应字符串(比如命名为jsonResponse),可以在onCreate里这么写:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout); // 记得替换成你的布局文件名

    // 这里替换成你实际拿到的完整JSON响应
    String jsonResponse = "{\"success\":true,\"timestamp\":1524649444,\"base\":\"EUR\",\"date\":\"2018-04-25\",\"rates\":{\"AED\":4.486623,\"AFN\":85.583411,\"ALL\":128.283655,...}}";

    // 初始化用来存数据的ArrayList
    ArrayList<CurrencyRate> currencyRatesList = new ArrayList<>();

    try {
        // 解析最外层的JSON对象
        JSONObject mainJsonObj = new JSONObject(jsonResponse);
        // 取出里面的"rates"对象,这就是存所有货币汇率的地方
        JSONObject ratesJsonObj = mainJsonObj.getJSONObject("rates");

        // 遍历rates对象里的所有键值对
        Iterator<String> currencyKeys = ratesJsonObj.keys();
        while (currencyKeys.hasNext()) {
            String code = currencyKeys.next(); // 获取货币代码,比如AED、AFN
            double rateValue = ratesJsonObj.getDouble(code); // 获取对应的汇率值
            // 创建CurrencyRate对象并添加到列表里
            currencyRatesList.add(new CurrencyRate(code, rateValue));
        }

        // 测试一下:打印列表里的数据
        for (CurrencyRate item : currencyRatesList) {
            Log.d("汇率数据", item.getCurrencyCode() + " : " + item.getRate());
        }

    } catch (JSONException e) {
        e.printStackTrace();
        // 这里可以处理解析失败的情况,比如给用户弹个提示
    }
}

方法二:用Gson解析(更简洁,需要添加依赖)

如果觉得原生解析有点繁琐,可以用Google的Gson库,它能帮我们自动把JSON转换成Java对象,省掉手动遍历的步骤。

首先在你的app/build.gradle里添加Gson的依赖:

implementation 'com.google.code.gson:gson:2.10.1'

然后定义一个对应整个JSON结构的模型类:

public class ExchangeRateResponse {
    private boolean success;
    private long timestamp;
    private String base;
    private String date;
    private Map<String, Double> rates; // 用Map来接收所有货币汇率

    // 只需要给rates加getter方法就够了,其他字段如果用不到可以不用加
    public Map<String, Double> getRates() {
        return rates;
    }
}

接下来就可以快速解析并转成ArrayList了:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout);

    String jsonResponse = "你的完整JSON响应字符串";
    ArrayList<CurrencyRate> currencyRatesList = new ArrayList<>();

    // 用Gson解析JSON
    Gson gson = new Gson();
    ExchangeRateResponse response = gson.fromJson(jsonResponse, ExchangeRateResponse.class);

    // 把Map里的键值对转成CurrencyRate对象并存入ArrayList
    for (Map.Entry<String, Double> entry : response.getRates().entrySet()) {
        currencyRatesList.add(new CurrencyRate(entry.getKey(), entry.getValue()));
    }

    // 同样可以打印测试
    for (CurrencyRate item : currencyRatesList) {
        Log.d("汇率数据", item.getCurrencyCode() + " : " + item.getRate());
    }
}

最后提醒你一句:Android里不能在主线程发起网络请求哦!如果你的REST请求是在onCreate里直接写的,会报NetworkOnMainThreadException,建议用Kotlin协程、Java的AsyncTask或者Retrofit这些工具来处理网络请求~

内容的提问来源于stack exchange,提问作者Afik Menashe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:23:17