遇到一个奇葩的需求,一段json的key值是动态的,并且这个key还是有作用的。这就要求在不知道key是多少的情况下去把这段json解析出来。
我用到的方法是迭代器。具体代码如下
JSONObject jsonObject = new JSONObject(jsonData); //通过迭代器获取这段json当中所有的key值 Iterator keys = jsonObject.keys(); //然后通过一个循环取出所有的key值 while (keys.hasNext()){ String key = String.valueOf(keys.next()); //最后就可以通过刚刚得到的key值去解析后面的json了 }
得到key值以后,就可以用jsonobject来解析对应的值了。
示例:
/** * 获取汇率 * * @return * @throws Exception */ @SuppressWarnings("rawtypes") public BigDecimal getRate() throws Exception { String m_rateResult = HttpUtil.sendGet("https://x.szsing.com/v2/quote/price/m_rate"); JSONObject jsonObject = new JSONObject(m_rateResult); JSONObject data = jsonObject.getJSONObject("data"); Iterator keys = data.keys(); String CNY = "0"; while (keys.hasNext()) { String key = String.valueOf(keys.next()); JSONObject m_rate = data.getJSONObject(key); CNY = m_rate.getString("CNY"); if (CNY.isEmpty() == false) { break; } } return new BigDecimal(CNY); } /** * 获取类别版本 * * @return * @throws Exception */ public String getCategoryVersion() throws Exception { String m_custom = HttpUtil.sendGet("https://x.szsing.com/v2/quote/price/m_custom"); JSONObject jsonObject = new JSONObject(m_custom); JSONObject data = jsonObject.getJSONObject("data"); JSONObject category = data.getJSONObject("category"); return category.getString("version"); }