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



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

[1,2,"abc",[2.2345,76,"n"],["abc",1,"c"],23,44]

方括号中的每个值(数字、小数、字符串、null)用逗号分隔,在括号中都可以嵌套在具有任意数量值的另一个方括号中。

我需要在 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列表中找到这些数组并单独解析它?

嵌套的JSON 数组被解析为List对象。由于您似乎也希望外部 JSON 数组作为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

我建议您查看以下用于 JSON 解析的 java 库,因为您提供的字符串看起来像 JSON 数组。事实上,您可以查看这个 JSON 解析器基准项目 - 有了这个,您可以自己选择合适的 json 解析器。

最新更新