创建字符串解析器以解析嵌套结构

Artegon:

我正在寻找有关如何创建解析器来解析这样的字符串的信息:

[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);

它适用于单个值(不是嵌套数组),有没有办法在第一次调用中直接解析这些嵌套数组,还是我必须在tokensList中找到这些数组并分别解析?

安德烈亚斯(Andreas):

嵌套的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章