需要解析动态HashMap<String, HashMap<String, HashMap<String,String>>>

Posted

技术标签:

【中文标题】需要解析动态HashMap<String, HashMap<String, HashMap<String,String>>>【英文标题】:Need to parse dynamic HashMap<String, HashMap<String, HashMap<String,String>>> 【发布时间】:2021-11-13 11:54:58 【问题描述】:

我正在解析一个 json,然后我需要填充图表上的值,我得到的响应如下

 
 "message": "Successful.",
 "data": 
 "stats": 
  "Total Transactions": 1,
  "Today Transactions": 0,
  "Today Pending Transactions": 0,
  "Payment links created": 2,
  "Api payments": 0
,
"otherData": 
  "countiesData": 
    "2021": 
      "US": 1
    
  ,
  "transactionTypesData": 
    "2021": 
      "PAYMENT_LINK": 1
    
  ,
  "graphData": 
    "2021": 
      "SUCCESS": 
        "1": 0,
        "2": 0,
        "3": 0,
        "4": 0,
        "5": 0,
        "6": 0,
        "7": 0,
        "8": 0,
        "9": 1,
        "10": 0,
        "11": 0,
        "12": 0
      
    
  ,
  "currentMoth": 3200,
  "preMonthAvr": 3200

,
"code": 200,
"accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9."

我已经在 otherData 中为 graphData 创建了模型数据。

data class OtherData(
    var countiesData : Any,
    var transactionTypesData: Any,
    var graphData : HashMap<String,HashMap<String,HashMap<String,String>>>

)

我通过这些行在 graphData 中获得了年份,但我无法在 year 对象中获得其他值。

it.data.data.otherData.graphData.let  graphYear->
                        if (graphYear.isNotEmpty())
                            tvYearForRevenueReport.text = graphYear.keys.elementAt(0)
                            tvFirstGraphLabel.text = graphYear.getValue(graphYear.keys.elementAt(0))   // giving error at this line 
                        
                     

所以我的问题是我在做什么是最好的方法吗?如果不是这样,如果有任何解决方法将很高兴听到。

【问题讨论】:

Isn't graphData: HashMap>> 另外,你收到的错误是什么? 没关系,我可以将重铸字符串转换为 Int 你的解析行可以吗? Gson/JSONObject 调用? 【参考方案1】:

使用 Gson 我能够解析您的 JSON:

创建一个数据类:

data class Data(
    val data: InnerData
)

还有一个 InnerData 类:

data class InnerData(
    val otherData: OtherData
)

并使用您的 OtherData 类:

data class OtherData(
    var countiesData : Any,
    var transactionTypesData: Any,
    var graphData : HashMap<String,HashMap<String,HashMap<String,String>>>
)

调用 Gson 解析 JSON 输入:

val parsed = Gson().fromJson(json, Data::class.java)

我已使用您的 JSON 作为输入,一切正常。

【讨论】:

以上是关于需要解析动态HashMap<String, HashMap<String, HashMap<String,String>>>的主要内容,如果未能解决你的问题,请参考以下文章

HashMap深度解析

ArrayList 和 HashMap 使用指令

ArrayList 和 HashMap 使用指令

在 MyBatis 3 中为 HashMap 参数嵌套 foreach

JAXB:如何编组 HashMap<String, HashMap<String, String>>?

hashMap源码解析