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

如何通过Volley解析嵌套JSON数组并提取X/Y轴数据绘制Android图表

嘿,我刚好折腾过类似的嵌套JSON数组解析+Volley+Android图表的需求,给你一步步理清楚怎么搞:

解决Volley解析嵌套JSON数组(market_cap)并提取X/Y轴数据的方案

第一步:用Volley发起JSON请求并获取响应

首先我们用Volley的JsonObjectRequest来请求数据,这样能直接拿到JSON对象,省去自己转字符串的步骤:

// 初始化Volley请求队列
RequestQueue queue = Volley.newRequestQueue(context);
String url = "你的JSON数据接口地址";

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                // 在这里处理JSON解析逻辑
                parseMarketCapData(response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // 请求失败的处理,比如Toast提示
                Toast.makeText(context, "请求数据失败", Toast.LENGTH_SHORT).show();
            }
        });

// 将请求加入队列
queue.add(jsonObjectRequest);

第二步:解析嵌套的market_cap数组

接下来就是核心的解析部分了。你的market_cap是一个嵌套数组,每个子数组的第一个元素是X轴日期,第二个是Y轴价格。我们可以用两个ArrayList分别存储X轴和Y轴的数据:

private void parseMarketCapData(JSONObject response) {
    ArrayList<String> xAxisDates = new ArrayList<>();
    ArrayList<Double> yAxisPrices = new ArrayList<>();

    try {
        // 获取market_cap对应的JSON数组
        JSONArray marketCapArray = response.getJSONArray("market_cap");
        
        // 遍历每个子数组
        for (int i = 0; i < marketCapArray.length(); i++) {
            JSONArray itemArray = marketCapArray.getJSONArray(i);
            
            // 提取日期(X轴):如果是时间戳,记得转成可读格式;如果已经是字符串直接用
            long timestamp = itemArray.getLong(0);
            // 转成yyyy-MM-dd格式的日期字符串
            String dateStr = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
                    .format(new Date(timestamp));
            xAxisDates.add(dateStr);
            
            // 提取价格(Y轴)
            double price = itemArray.getDouble(1);
            yAxisPrices.add(price);
        }
        
        // 解析完成后,把数据传给图表绘制方法
        setupChart(xAxisDates, yAxisPrices);
        
    } catch (JSONException e) {
        e.printStackTrace();
        Toast.makeText(context, "解析数据失败", Toast.LENGTH_SHORT).show();
    }
}

这里要注意:如果你的日期不是时间戳,而是直接的字符串(比如"2024-05-01"),那直接用itemArray.getString(0)就行,不用转时间戳。

第三步:把解析后的数据传给图表库

假设你用的是常用的MPAndroidChart库,我们可以把上面的ArrayList转成图表需要的Entry列表,然后设置给LineChart:

private void setupChart(ArrayList<String> xDates, ArrayList<Double> yPrices) {
    LineChart lineChart = findViewById(R.id.line_chart);
    
    ArrayList<Entry> entries = new ArrayList<>();
    for (int i = 0; i < yPrices.size(); i++) {
        // Entry的第一个参数是X轴的索引(或者你也可以用时间戳转成float),第二个是Y轴价格
        entries.add(new Entry(i, yPrices.get(i).floatValue()));
    }
    
    LineDataSet dataSet = new LineDataSet(entries, "Market Cap");
    dataSet.setColor(Color.BLUE);
    dataSet.setValueTextColor(Color.BLACK);
    
    LineData lineData = new LineData(dataSet);
    // 设置X轴的标签
    lineChart.getXAxis().setValueFormatter(new ValueFormatter() {
        @Override
        public String getFormattedValue(float value) {
            return xDates.get((int) value);
        }
    });
    
    lineChart.setData(lineData);
    lineChart.invalidate(); // 刷新图表
}

这样一套流程下来,就能把嵌套的market_cap数据提取出来,转成图表需要的X/Y轴数据啦。如果你的图表库不是MPAndroidChart,逻辑也是类似的——先把数据提取到集合里,再转成对应库要求的数据格式就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:26:23