2014-10-01 55 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或其他库。