解析不确定key的JSON

mac2026-02-13  11

编写解析json的工具类

public class JsonLoop { public static Map utils(String string) { Map<String, Object> objectMap = new HashMap<>(); try { JSONObject object = new JSONObject(string); Iterator iterator = object.keys(); while (iterator.hasNext()) { String key = (String) iterator.next(); Object value = object.get(key); objectMap.put(key, value); } return objectMap; } catch (JSONException e) { e.printStackTrace(); return objectMap; } } }

在需要的地方使用

获取知道key的json解析的简单使用

val objectMap = JsonLoop.utils(responseText) for (key in objectMap.keys) { if ("200" == key) { return } else if ("ok" == key){ return } else if ("data" == key){ finance_health_analysis_empty.visibility = View.GONE in_finance_health_analysis_chart.visibility = View.VISIBLE if (objectMap[key] is JSONObject) { data2Chart(objectMap[key].toString()) } } }

获取不固定key的json解析的简单使用

//使用方法一 val dataMap = JsonLoop.utils(jsonString) for (mutableEntry in dataMap) { val key = mutableEntry.key.toString() val value = mutableEntry.value.toString().toFloat() //获取key和value,编写自己需要的代码 } //使用方法二(知道key的格式,但是不知道具体多少个) val dataMoneyMap = JsonLoop.utils(dataMap[key].toString())//获取数据 val c = Calendar.getInstance() var dateOfset= 2 var whenDay = c.get(Calendar.DAY_OF_WEEK) var maneyDay = 7 while (whenDay - tOfset >= 0) { val dateKey = df5.format(System.currentTimeMillis() - (whenDay - tOfset) * 24 * 60 * 60 * 1000)//获取格式为yyyy-MM-dd的时间,作为key val value = dataMoneyMap[dateKey] //底下的判断是把数据放入piechart中,这是我这边的需求,有其他需求的可以看一下,根据自己的需求改动。 if (value == null) { lineEntrys.add(Entry((tOfset - 2).toFloat(), 0f)) } else { lineEntrys.add(Entry((tOfset - 2).toFloat(), value.toString().toFloat())) } tOfset++ } while (whenday<= maneyDay) { lineEntrys.add(Entry((thisInt - 1).toFloat(), 0f)) whenday++ } //这是json包含的是用日期做Key的数据,进行解析,key不存在的日期把value置为0。

备注

这个工具类获取的第一层key-value数据,只要判断value还是JSONObject还可以放入工具类中进行再次解析,当然,如果有解析JSONArray的需求的话也可以判断以下value,编写JSONArray的解析。 当然,也可以通过写递归解析类,直接一次把数据全解析出来。

最新回复(0)