【问题标题】:STRING to ArrayList<String> using TypeReference字符串到 ArrayList<String> 使用 TypeReference
【发布时间】:2015-12-07 03:03:46
【问题描述】:
str = "[tdr1w6v, tdr1w77]";
ObjectMapper objectMapper = new ObjectMapper();
JavaType type = objectMapper.getTypeFactory().
                constructCollectionType(ArrayList.class, String.class);
ArrayList<String> list = null;
        try {
            list = objectMapper.readValue(str,
                    new TypeReference<ArrayList<String>>(){});
        } catch (IOException e) {
            e.printStackTrace();
        }

这里抛出异常:

com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'tdr1w6v': was expecting 'null', 'true', 'false' or NaN

如何将 str 转换为字符串的 ArrayList ?

【问题讨论】:

  • 这似乎不是正确的 JSON。你从哪里得到它?试试"[\"tdr1w6v\", \"tdr1w77\"]";
  • 实际上我将 JSONArray 映射到 ArrayList 并将 ArrayList&lt;String&gt;.toString 转储到 db。
  • 如果您想使用 JSON 解析器检索它,请将 JSONArray 转换为表示有效 JSON 结构的字符串。 JSONArray 来自哪个包?
  • {"path": [ "tdr1w6v", "tdr1w77" ]} 将其映射到ArrayList&lt;String&gt; path。然后使用模型类创建DAO并将数据推送到数据库。在 DAO 实现的映射器中,我将其转换为 path.toString()。也就是这个方法在db中保存的格式。
  • 你大概可以得到答案[这里][1] [1]:stackoverflow.com/questions/7347856/…

标签: java arraylist


【解决方案1】:

@FedericoPeraltaSchaffner 的建议有所帮助。现在我要做的是,在我的活页夹类中使用objectMapper.writeValueAsString 将数据转换为存储在数据库中。在我的 Mapper 类中,从数据库读取时,我可以使用与问题相同的方式:

ObjectMapper objectMapper = new ObjectMapper();
ArrayList<String> list = null;
try {
        list =objectMapper.readValue(str, new TypeReference<ArrayList<String>>(){});
    } catch (IOException e) {
        e.printStackTrace();
    }

所以现在我不必创建单独的 DTO 类,我可以在服务层和 DAO 使用相同的模型。

【讨论】:

    【解决方案2】:

    不用TypeReference也能轻松满足需求

    String str="[tdr1w6v, tdr1w77]";
    List<String> al=Arrays.asList(str.replaceAll("[\\[\\]]","").split(","));
    System.out.println(al);
    

    【讨论】:

    • 谢谢。您的回答与@pmartin8 建议的相同。
    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2014-05-16
    • 1970-01-01
    • 2019-10-19
    相关资源
    最近更新 更多