获取JSON数据并将其放入X / Y数据以创建图形

时间:2018-04-17 18:04:06

标签: java android json

我正在尝试使用Volley创建一个使用JSON数据的图表。我将在创建图表时遵循此问题Plotting Line Graph with JSON data, Android的答案。我的问题是我不知道如何从JSON获取数据。如下所示,market_cap内部是一个存储数组数据的数组。如何获取market_cap内的所有数据并将其存储到X和Y中以用于图表?在数组内部,第一个值是日期,第二个值是price。

JSON

{  
   "market_cap":[  
      [  
         1521320052000,
         53961098802
      ],
      [  
         1521330851000,
         54300167307
      ],
      [  
         1521334452000,
         51916531911
      ],
      [  
         1521345251000,
         51207867582
      ]
   ]
}

Volley Code

StringRequest strReq = new StringRequest(Request.Method.POST, "URL",
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONObject jsonObject = new JSONObject(response);
                JSONArray jsonArray = jsonObject.getJSONArray("market_cap");
                for (int i = 0; i < jsonArray.length(); i++) {
                    x.add(//add date);
                    y.add(//add value);
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

我建议使用更简单,更简单的Gson。在您的情况下,您可以考虑解析JSON,如下所示。

MarketPrice

所以你需要一个MarketPrice类来解析这个类中JSON的值。所以public class MarketPrice implements Serializable { public String[][] market_cap; } 类看起来应该是这样的。

mapTheTimeVsPriceGraph

List<Long> time = new ArrayList<Long>(); List<Integer> price = new ArrayList<Integer>(); public void mapTheTimeVsPriceGraph(MarketPrice mp) { for (int i = 0; i < mp.length; i++) { time.add(Long.parseLong(mp[i][0])); time.add(Integer.parseInt(mp[i][1])); } } 函数看起来应该是这样的。

for

我没有测试过代码。但是,我认为它应该工作并让你朝着正确的方向前进。

答案 1 :(得分:0)

您可以使用建议的Reaz Murshed GSON解决方案,或者您可以单步执行数组并直接获取值。 GSON方法更优雅,但我只想获取值,以下示例就足够了,无需导入GSON。

@Override
public void onResponse(String response) {
    try {
        JSONObject jsonObject = new JSONObject(response);
        JSONArray jsonArray = jsonObject.getJSONArray("market_cap");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONArray jsonData = jsonObject.getJSONArray(i);
            if(jsonData == 2){
                x.add(jsonData.optLong(0, -1));
                y.add(jsonData.optLong(1, -1));
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

第一个元素“market_cap”是JSONArray,“market_cap”元素的子元素也是JSONArray。因此,从“market_cap”获取JSONArray后,您可以遍历“jsonArray”中的每个JSONArray。然后,因为你需要x,y对你的图只是检查JSONArray我调用“jsonData”是否恰好有2个元素。现在,您可以使用JSONArray索引来访问数据。我建议你使用optLong()方法和后备值 - 如果出现任何问题,你会得到一个值。我在这个例子中使用了-1,但你可以使用不同的值。