首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检索JSONObject子字段?

如何检索JSONObject子字段?
EN

Stack Overflow用户
提问于 2019-12-12 22:52:39
回答 1查看 147关注 0票数 0

我已经找了很久了。我正在使用exchangerate,我需要一些json响应的帮助,我想得到日期和值的CAD

下面是我拥有的一个JSONObject:

代码语言:javascript
复制
{"rates":{"2019-11-27":{"CAD":1.3266418385},
    "2019-11-28":{"CAD":1.3289413903},
    "2019-12-03":{"CAD":1.3320386596},
    "2019-12-02":{"CAD":1.3295835979},
    "2019-11-29":{"CAD":1.3307230013}},
    "start_at":"2019-11-27","base":"USD","end_at":"2019-12-03"}

我的活动

公共类ChartActivity扩展AppCompatActivity {

代码语言:javascript
复制
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chart);
        new GetServerData(this).execute();
    }

    private static class GetServerData extends AsyncTask<Integer, Void, List<BarEntry>> {
        private static final int TIMEOUT = 30000;
        private static final String BASE_URL = "https://api.exchangeratesapi.io/history?start_at" +
                "=2019-11-27&end_at=2019-12-03&base=USD&symbols=CAD";
        private WeakReference<ChartActivity> activityReference;

        GetServerData(ChartActivity context) {
            activityReference = new WeakReference<>(context);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected List<BarEntry> doInBackground(Integer... integers) {
            List<BarEntry> barEntries = new ArrayList<>();
            OkHttpClient client = new OkHttpClient().newBuilder()
                    .readTimeout(TIMEOUT, TimeUnit.SECONDS)
                    .connectTimeout(TIMEOUT, TimeUnit.SECONDS)
                    .writeTimeout(TIMEOUT, TimeUnit.SECONDS)
                    .retryOnConnectionFailure(true)
                    .build();
            Request request = new Request.Builder()
                    .url(BASE_URL)
                    .build();
            try {
                Response response = client.newCall(request).execute();
                Log.d("Response", response.toString());
                JSONObject object = new JSONObject(Objects.requireNonNull(response.body()).string());
                JSONObject rates = object.getJSONObject("rates");
                Iterator<String> iterator = rates.keys();
                while (iterator.hasNext()) {
                    /* what i should write here to get the date and double values which is in 
                     JSONObject.*/

                    //barEntries.add(new BarEntry(int required of date, float required of value ));
                }
            } catch (IOException | JSONException e) {
                e.printStackTrace();
                Log.d("ChartActivity", e.toString());
            }
            return barEntries;
        }

        @Override
        protected void onPostExecute(final List<BarEntry> result) {
            final ChartActivity activity = activityReference.get();
            if (activity == null || activity.isFinishing()) {
                return;
            }
            BarChart barChart = activity.findViewById(R.id.bar_chart);

            BarDataSet dataSet = new BarDataSet(result, "Growth");
            dataSet.setColors(ColorTemplate.COLORFUL_COLORS);
            BarData barData = new BarData(dataSet);
            barData.setBarWidth(0.9f);
            barChart.animateY(5000);
            barChart.setData(barData);
            barChart.setFitBars(true);
            Description description = new Description();
            description.setText("Growth rate per week");
            barChart.setDescription(description);
            barChart.invalidate();

        }
    }
}

如您所见,我想检索数据,以显示图表,请任何帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-13 00:19:50

你可以试试这个。没有时间对它进行测试,但希望它能有所帮助:

代码语言:javascript
复制
JSONObject rates = object.getJSONObject("rates");
Iterator<String> iterator = rates.keys();
while (iterator.hasNext()) {
    String keyDate = iterator.next(); // the date
    String cad = rates.getJSONObject(keyDate).getString("CAD"); // the numeric
}

编辑:

这远离了JSON主题,但是将日期字符串转换为数字可以这样做。你必须找出正确的日期格式。

代码语言:javascript
复制
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
try {  
    Date date = formatter.parse("31/03/2015");  
    System.out.println("Date as milliseconds from 1.1.1970: "+date.getTime());  
} catch (ParseException e) {e.printStackTrace();}  
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59313826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档