全方位解析key值不确定的json数据
时间:2021-06-03 09:12:48|栏目:JAVA代码|点击: 次
遇到一个奇葩的需求,一段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");
}
补充:如何解析key值不固定的json数据
大多数情况下我们遇到的json数据一般都是key值是固定的,方便我们创建对应的实体类对象来进行解析。但有时候也会有些特殊情况,key值和value值一样都是动态未知的情况。
如下所示:
{
data: {
"姓名": "老王",
"年龄": "41",
"性别": "男",
}
}
那如何解决呢?
直接贴代码:
JSONObject jsonObject = new JSONObject(jo.toString);//json数据
JSONObject data= jsonObject.getJSONObject("data");
// 动态获取key值
Iterator<String> iterator = data.keys();//使用迭代器
while (iterator.hasNext()) {
String key = iterator.next();//获取key
String value = data.getString(key);//获取value
Log.e("key-value","key="+key+" value="+value);
}
上一篇:Java中避免NullPointerException的方法总结
栏 目:JAVA代码
下一篇:Java实现九九乘法表的小例子
本文标题:全方位解析key值不确定的json数据
本文地址:http://www.codeinn.net/misctech/134696.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




