2017-03-01 45 views
-1

我有一個像[1,2]的JSON數組字符串。我想將它轉換爲Set.How可以在java 8中執行嗎?如何將JSON數組字符串轉換爲在java中設置

這是我的代碼

String languageStr = rs.getString("languages"); 
jobseeker.setLanguageIds(StringUtils.isEmpty(languageStr) ? null 
        : Arrays.stream(languageStr.split(",")) 
        .map(Integer::parseInt) 
        .collect(Collectors.toSet())); 

獲取錯誤這樣

java.lang.NumberFormatException:對於輸入字符串: 「2」

在JSON數組的空間是problem.Is有沒有解決辦法?

這是我的代碼之後改變

String languageStr = rs.getString("languages"); 
      String languages=languageStr.substring(1,languageStr.length()-1); 
      jobseeker.setLanguageIds(StringUtils.isEmpty(languages) ? null 
        : Arrays.stream(languages.split(",")) 
        .map(String::trim) 
        .map(Integer::parseInt) 
        .collect(Collectors.toSet())); 

我能以任何其他方式輸出withot使用這2個步驟: 語言= languageStr.substring(1 languageStr.length() - 1);

.MAP(字符串:: TRIM)

+0

請寫下一些代碼以便更好地理解。 –

+0

請提供您到目前爲止嘗試過的一些代碼。 – VVN

+0

添加了我到目前爲止嘗試使用的代碼 –

回答

0

可以使用trim方法之前,除去開頭和結尾的withespace其解析爲整數。

所以,你的代碼將是這個

Arrays.stream(languageStr.split(",")) 
       .map(String::trim) 
       .map(Integer::parseInt) 
0

我終於得到了解決

更改代碼:

String languageStr = rs.getString("languages"); 

Set<Integer> languages = mapper.readValue(languageStr, typeFactory.constructCollectionType(Set.class, Integer.class)); 

jobseeker.setLanguageIds(StringUtils.isEmpty(languageStr) ? null : languages); 
0

使用TypeToken和谷歌GSON庫,您應該能夠做到如下:

String languageJsonStr = rs.getString("languages");  
Set<Integer> myLanguageSet = new Gson().fromJson(languageJsonStr, new TypeToken<HashSet<Integer>>(){}.getType()); 
相關問題