我正在寻找有关如何创建解析器来解析这样的字符串的信息:
[1,2,"abc",[2.2345,76,"n"],["abc",1,"c"],23,44]
方括号中用逗号分隔的每个值(数字,十进制,字符串,空值)以及方括号都可以嵌套在另一个方括号中,该方括号可以具有任意数量的值。
我需要用Java创建它。
问:是否有一些库,算法/设计策略/设计模式,如何创建这样的解析器?
编辑:
final String value = "[1,2,\"abc\",[2.2345,76,\"n\"],[\"abc\",1,\"c\"],23,44]";
ObjectMapper objectMapper = new ObjectMapper();
Object[] foo = objectMapper.readValue(value, Object[].class);
List<Object> tokens = Arrays.asList(foo);
它适用于单个值(不是嵌套数组),有没有办法在第一次调用中直接解析这些嵌套数组,还是我必须在tokens
List中找到这些数组并分别解析?
嵌套的JSON数组被解析为List
对象。由于您似乎也希望外部JSON Array List
,因此将其解析为,而不是Object[]
。
您可以通过以下代码看到实际得到的结果:
public static void main(String[] args) throws Exception {
final String value = "[1,2,\"abc\",[2.2345,76,\"n\"],[\"abc\",1,\"c\"],23,44]";
ObjectMapper objectMapper = new ObjectMapper();
List<?> tokens = objectMapper.readValue(value, List.class);
printTypes("", tokens);
}
static void printTypes(String indent, List<?> tokens) {
for (Object token : tokens) {
System.out.println(indent + token.getClass().getName() + " - " + token);
if (token instanceof List)
printTypes(indent + " ", (List<?>) token);
}
}
输出量
java.lang.Integer - 1
java.lang.Integer - 2
java.lang.String - abc
java.util.ArrayList - [2.2345, 76, n]
java.lang.Double - 2.2345
java.lang.Integer - 76
java.lang.String - n
java.util.ArrayList - [abc, 1, c]
java.lang.String - abc
java.lang.Integer - 1
java.lang.String - c
java.lang.Integer - 23
java.lang.Integer - 44
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句