我正在尝试使用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);
}
}
}
}
答案 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,但你可以使用不同的值。