全方位解析key值不确定的json数据

 更新时间:2021年01月25日 15:17:24   作者:人艰不拆_zmc  
这篇文章主要介绍了全方位解析key值不确定的json数据,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

遇到一个奇葩的需求,一段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线程的创建与构造方法

    深入探究Java线程的创建与构造方法

    这篇文章主要给大家分享的是java线程的创建以及构造方法,想了解具体方式的小伙伴可以参考下面文章内容,希望对你有所帮助
    2022-04-04
  • Java基于API接口爬取商品数据的示例代码

    Java基于API接口爬取商品数据的示例代码

    Java作为一种流行的编程语言,可以用于编写程序来调用这些API接口,从而获取商品数据,本文将介绍如何使用Java基于API接口爬取商品数据,包括请求API、解析JSON数据、存储数据等步骤,并提供相应的代码示例,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • SpringBoot集成cache缓存的实现

    SpringBoot集成cache缓存的实现

    日常开发中,缓存是解决数据库压力的一种方案,本文记录springboot中使用cache缓存。需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • Java中常见的对象转换工具

    Java中常见的对象转换工具

    对象进行对象的转换是一个操作重复且繁琐的工作,于是市面上就有许多的对象转换工具来解决这个问题,下面我们就来看看几个比较常用的工具(mapstruct,Spring BeanUtils,Apache BeanUtils)使用方式及其性能
    2023-04-04
  • 使用BitSet位集合,一个重复校验工具

    使用BitSet位集合,一个重复校验工具

    这篇文章主要介绍了使用BitSet位集合,一个重复校验工具,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java之MultipartFile和File类型互转方式

    Java之MultipartFile和File类型互转方式

    这篇文章主要介绍了Java之MultipartFile和File类型互转方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • ZooKeeper官方文档之Java客户端开发案例翻译

    ZooKeeper官方文档之Java客户端开发案例翻译

    网上有很多ZooKeeper的java客户端例子,我也看过很多,不过大部分写的都不好,有各种问题。兜兜转转还是觉得官方给的例子最为经典,在学习之余翻译下来,供朋友们参考
    2022-01-01
  • 如何使用Comparator比较接口实现ArrayList集合排序

    如何使用Comparator比较接口实现ArrayList集合排序

    这篇文章主要介绍了如何使用Comparator比较接口实现ArrayList集合排序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 使用JMeter从JSON响应的URL参数中提取特定值

    使用JMeter从JSON响应的URL参数中提取特定值

    在使用Apache JMeter进行API测试时,我们经常需要从JSON格式的响应中提取特定字段的值,这可以通过使用JMeter内置的JSON提取器和正则表达式提取器来完成,本文介绍JMeter JSON提取特定值的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Idea运行单个main方法,不编译整个工程的问题

    Idea运行单个main方法,不编译整个工程的问题

    这篇文章主要介绍了Idea运行单个main方法,不编译整个工程的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论