2014-10-01 56 views
0

我得到的JSON字符串這樣的值:{Numbers: [10,20,30]},我想分析的價值爲Numbers,並將其保存爲一個List以JSON字符串的值,並得到

[10,20,30] 

做任何事情在番石榴這樣做?不能使用除此之外的任何其他第三方庫或內置的庫。 (在Java 7上)。

+0

YOY你不能使用其他庫? JSON確實應該嵌入到JDK中,但我猜測在這一點上,Oracle知道他們挑選的任何範例都會受到其他方案的遊說者的惡毒批評。但是,構建任何沒有JSON支持的半現代Java應用程序是不切實際的。 – 2014-10-01 21:23:21

回答

1

不,但是gson呢。聲明一個類像

class C { 
    private List<Integer> Numbers; 
} 

呼叫

new Gson().fromJson(s, C.class); 

就大功告成了。

但是,這不是很好。該列表應該被稱爲小寫字母numbers,也許它應該是一個數組。對於前者,請看FieldNamingStrategy,這封信應該AFAIK工作只是簡單地聲明它像int[] numbers

更新

對不起,沒有正確地閱讀問題。這個簡單的東西可以用正則表達式和番石榴在幾行來處理:

private static final Pattern PATTERN = 
     Pattern.compile("\\{Numbers:\\[([\\d, ]+)\\]\\}"); 

List<Integer> parse(String input) { 
    input = CharMatcher.WHITESPACE.removeFrom(input); 
    final Matcher matcher = PATTERN.matcher(input); 
    checkArgument(matcher.matches()); 
    input = matcher.group(1); 
    final Iterable<String> split = Splitter.on(',').split(input); 
    final List<Integer> result = Lists.newArrayList(); 
    for (final String s : split) result.add(Integer.parseInt(s)); 
    return result; 
} 

它的工作原理,但你真的不應該試圖避免的情況下,它變得更爲複雜庫。 JSON相當靈活,手動處理它需要編寫一個合適的解析器和處理對象的創建等等,這意味着重新實現Gson或其他庫。