如何在Java中获取YAML文件fruits下的子键名字符串数组
Java 解析YAML提取键为String数组的实现方法
完全可行,你可以通过第三方YAML解析库(比如SnakeYAML或Jackson YAML模块)实现需求,核心思路是将YAML内容解析为嵌套Map,再提取目标节点的键集合转成String数组。以下是具体实现:
方法一:使用SnakeYAML
SnakeYAML是Java生态中常用的YAML解析库,步骤如下:
- 添加Maven依赖
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version> <!-- 建议使用最新稳定版 --> </dependency>
- 解析代码
import org.yaml.snakeyaml.Yaml; import java.io.InputStream; import java.util.Map; public class FruitExtractor { public static void main(String[] args) { Yaml yamlParser = new Yaml(); // 从resources目录加载YAML文件 try (InputStream input = FruitExtractor.class.getClassLoader().getResourceAsStream("fruits.yaml")) { // 解析为嵌套Map结构 Map<String, Map<String, Map<String, String>>> yamlData = yamlParser.load(input); // 获取fruits节点下的所有子键 Map<String, Map<String, String>> fruitsMap = yamlData.get("fruits"); String[] fruitNames = fruitsMap.keySet().toArray(new String[0]); // 验证结果 for (String name : fruitNames) { System.out.println(name); } } catch (Exception e) { e.printStackTrace(); } } }
方法二:使用Jackson YAML模块
如果你已经在项目中使用Jackson处理JSON,也可以用它的YAML扩展:
- 添加Maven依赖
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.15.2</version> <!-- 建议使用最新稳定版 --> </dependency>
- 解析代码
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import java.io.File; import java.util.Map; public class FruitJacksonExtractor { public static void main(String[] args) { ObjectMapper yamlMapper = new ObjectMapper(new YAMLFactory()); try { // 读取YAML文件(替换为你的文件路径) Map<String, Map<String, Object>> yamlData = yamlMapper.readValue(new File("src/main/resources/fruits.yaml"), Map.class); Map<String, Object> fruitsMap = yamlData.get("fruits"); String[] fruitNames = fruitsMap.keySet().toArray(new String[0]); // 验证结果 for (String name : fruitNames) { System.out.println(name); } } catch (Exception e) { e.printStackTrace(); } } }
注意事项
你提供的YAML中"grapes"拼写为"graps",如果需要最终数组包含正确的"grapes",请先修正YAML文件中的拼写错误。
内容的提问来源于stack exchange,提问作者Chocorot
相关产品推荐
相关产品推荐

