【问题标题】:Convert String to Map without regex [duplicate]在没有正则表达式的情况下将字符串转换为映射 [重复]
【发布时间】:2020-12-21 12:27:00
【问题描述】:

我有一个返回这种格式的字符串的服务器:

{"success":true,
 "visible":false,
 "data":
     {"ref":"asfdasfsadfaeweatsagsdfsad",
      "userRef":"asdfsadfsa","accountType":"REAL",balance":43},
"code":"2200",
"msg":null,
"msgRef":null,
"successAndNotNull":true,
"failedOrNull":false,
"failed":false,
"failedAndNull":false}`

然后我通过这样做提取data:

val jsonObj : Any! = JSONObject(serverResponse.toString()).get("data").toString()

我最终得到了这个字符串:

"{"ref":"safdasfdwaer",
 "userRef":"fdgsgdsgdsfg",
 "accountType":"REAL",
 "balance":43}"

有没有一种有效的方法可以将值提取到 HashMap 中,键在“:”左侧,值在“:”右侧?

我已经在这里看到了答案 (Convert String to Map) 但我不能使用正则表达式

【问题讨论】:

  • 我看过这个帖子。 Kotlin 中的 JSONObject(serverResponse.toString()).get("data") 返回数据类型“Any!”这让我无法使用 new ObjectMapper().readValue(JSON_SOURCE, HashMap.class);因为我实际上没有 JSON_SOURCE
  • @JanisLadja 然后将其转换为字符串。
  • 然后从String到JSON,还是从String到Json再到Map?
  • JSON_SOURCE 是字符串类型,因此您将把您的字符串传递给新的ObjectMapper().readValue(String, HashMap.class); 并获取地图
  • @JanisLadja 我提出了一个详细描述事物的答案

标签: java string kotlin split hashmap


【解决方案1】:

问题是您通过显式编写类型来强制您的jsonObj 为Any

val jsonObj : Any!

由于您的方法实际上返回字符串(因为它以 toString() 结尾)

JSONObject(serverResponse.toString()).get("data").toString()

随便写

val jsonObjStr = JSONObject(serverResponse.toString()).get("data").toString()

然后使用我们在 cmets 中提出的答案中的解决方案。

val result: Map<String, Any> =
   ObjectMapper().readValue(jsonObjStr, HashMap::class.java);

【讨论】:

  • 为什么还要先使用JSONObject,将其转换回字符串,然后再使用ObjectMapper?直接使用ObjectMapper即可。
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2014-04-09
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多