java - 创建字符串解析器来解析嵌套结构
问题描述
我正在寻找如何创建解析器来解析这样的字符串的信息:
[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
List 中找到这些数组并单独解析它?
解决方案
嵌套的 JSON 数组被解析为List
对象。由于您似乎也希望外部 JSON 数组为 a 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
推荐阅读
- javascript - 如何使用 ajax 加载快速启动页面或使用路由发布
- android - Android Videoview 不显示 mp4
- php - 如何在 Laravel 中手动设置 auth()?
- crystal-reports - 水晶报表使字符串加粗
- python - 在 Pytest 中处理 MagicMock 转换
- flutter - Flutter + iOS Simulator + Mac M1: Lost connection to device
- mongodb - MongoDB keeps generating a new id even after setting the id property when saving in the DB
- python - Python code to compute anagrams without reptetitions
- flutter - Flutter how to sort and group a map of data
- python - Python-Boto3 to S3 limitation