gpt4 book ai didi

java - 如何使用 Java 库将标记的 YAML 对象转换为 JSON 对象?

转载 作者:行者123 更新时间:2023-12-02 18:28:20 25 4
gpt4 key购买 nike

如何解析包含标记映射的 YAML 文件并返回嵌套的 Java Map 对象,其中每个 Java Map 包含相应 YAML 映射中的所有条目,以及键为 String “objectType”的条目”,该值是标签的(字符串)名称?

换句话说,我想解析标记的 YAML 对象,就像它们是带有类型条目的 JSON 对象一样。

例如,你如何解析这个:

!ControlGroup
name: myGroup
controls:
- !Button
name: button1
size: 10
- !Knob
name: knob1
maxValue: 11
size: 7

好像是这样的?:

objectType: ControlGroup
name: myGroup
controls:
- objectType: Button
name: button1
size: 10
- objectType: Knob
name: knob1
maxValue: 11
size: 7

我已经在我正在从事的项目中使用 SnakeYAML,因此如果存在使用 SnakeYAML 的解决方案,那将是理想的选择。

最佳答案

我已经写了code以单元测试的形式,它会使用 snakeYml 准确解析您提供的文件。只需运行它即可。

 @Test
void testYamlConvert() throws IOException {

// Step 1: Raad in file
var in = this.getClass().getResourceAsStream("/test.yml");
// System.out.println(in);
String yml = IOUtils.toString(in,"UTF-8");


// Step 2: Do in memory replacement to standard form
Pattern p = Pattern.compile("!!(.*)");
Matcher m = p.matcher(yml);

String ymlWithReplacement = yml;
while (m.find()) {
var nameToken = m.group().substring(2);
// System.out.println("Name token:"+nameToken);
ymlWithReplacement=ymlWithReplacement.replace("!!"+nameToken, "objectType: "+nameToken);
}
// System.out.println(ymlWithReplacement);

// Step 3: Do the parse ...
Yaml yaml = new Yaml();
var myYamlMap = (Map<String,Object>) yaml.load(ymlWithReplacement);

for(var entry : myYamlMap.entrySet()) {
System.out.println("Key:" + entry.getKey() + "Value:" + entry.getValue());
}
}

这是生成的 map 的样子。

enter image description here

从这里获取必要的数据应该很容易。工作原理在评论中解释。

如果您需要其他东西才能让我领取赏金,请告诉我!

关于java - 如何使用 Java 库将标记的 YAML 对象转换为 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69794601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com