如何将下面的字符串转换为地图列表?

时间:2019-12-26 08:32:42

标签: java string list dictionary

如何将字符串下面的内容转换为地图列表?

[
    {externalId=externalId_2, 
    externalIdDocId=abc, 
    partyRoleExternalIdType=type_extId
    }, 
    {externalId=externalId_3, 
    externalIdDocId=xyz, 
    partyRoleExternalIdType=type_extId2
    }
]

我尝试将字符串转换为字符串列表

List<String> externalIdlist = (List<String>) gson.fromJson(cbExternalIds, List.class);

然后将每个字符串一一转换为map

Map<String, String> externalIdMap = gson.fromJson(gson.toJson(externalIdlist.get(i)), Map.class);

这可行,但是有更好的解决方案吗?

4 个答案:

答案 0 :(得分:1)

new Gson().fromJson(inputString, new ArrayList<Map<String, String>>().getClass())

经过测试,并获得了结果-

enter image description here

这将适用于您的用例。

答案 1 :(得分:0)

以下代码段将满足需要。我假设您的预期输出是List<Map<String, String>类型。

List<Map<String, String>> output = new ArrayList<>();
input = input.substring(2, input.length() -2);

String[] split = input.replace("}, {", "!").split("!");
for (String s : split) {
    String[] split1 = s.trim().split(",");
    Map<String, String> m1= new HashMap<>();
    for (String s1 : split1) {
        String[] kv = s1.trim().split("=");
        m1.put(kv[0],kv[1]);
    }
    output.add(m1);
}
return output;

答案 2 :(得分:0)

尝试一下

HashMap<String,Object> result = new ObjectMapper().readValue(jsonString.replaceAll("=",":"), HashMap.class);

首先,您必须通过将“ =” chars替换为“:”将字符串转换为正确的Json,然后使用ObjectMapper将其转换为 HashMap类对象

ObjectMapper 将Json解析为特定的Class对象

答案 3 :(得分:0)

最简单的方法是使用像这样的字符串方法手动解析它:

  1. 使用[删除]replaceAll
  2. 使用split(",")
  3. 将其余的拆分为对象令牌
  4. 删除每个标记{},然后像在步骤2中一样使用split(",")拆分其参数,然后创建参数param的键值对,并使用split("=")进行拆分。从每对中,您都可以将值作为第二个参数,或者直接丢弃键。
  5. 现在您有了带有参数数组的数组,可以从中手动创建对象

    MyObject obj = new MyObject(); obj.setExternalId(tokens[0]); obj.setexternalIdDocId(tokens[1]); obj.setpartyRoleExternalIdType(tokens[2]);

  6. 最后手动创建您的Map或Array并添加创建的对象。

如果要使用GSon,Jackson或其他,则必须先使用3个参数创建对象模型,然后使用MyObject[] myObjArray = gson.fromJson(myJson, MyObject[].class);调用解析器