springboot读取yaml文件的map集合

这是我的yaml文件,我想把userDefinedResult这个map集合读取出来
在这个集合中 {"id":"10086","name":"zhangjingqi"} 这整个当作key s当作value,但是我最后读取的结果却不是我想想的那样


usedefinedyaml:
  path:
    userDefinedResult: {
      '{"id":"10086","name":"zhangjingqi"}' : "s"
    }

封装的这个类去读取yaml集合

@Data
@Component
@ConfigurationProperties(prefix = "usedefinedyaml.path")
public class UserDefineMapConfig {
    private HashMap<String,String> userDefinedResult;
}

将数据读取出来后再将map转成json字符串的形式输出

System.out.println(objectMapper.writeValueAsString(userDefineMapConfig.getUserDefinedResult()));

读取后在控制台输出这个集合的内容如下,

img


但是这个输出并没有达到我想要的效果,因为引号没有输出出来,我想达到下面这种效果
{"id":"10086","name":"zhangjingqi"}' : "s"
为啥最后是一个s,因为我打不出好几个s了,我真不知道为什么
朋友们有没有知道这是怎么回事呀,我尝试了好几种方法都不太行

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据你提供的代码和输出结果,可以看出你的配置文件中userDefinedResult的值被解析成了一个Map<String, Object>,其中键是"{"id":"10086","name":"zhangjingqi"}",值是s。因此,在输出时,使用ObjectMapper转换为JSON字符串时,双引号被去掉了。

要达到你想要的效果,即将{"id":"10086","name":"zhangjingqi"}作为键,可以将其作为一个单独的字符串作为键,而不是作为JSON对象。修改你的配置文件如下:

usedefinedyaml:
  path:
    userDefinedResult: {
      "id:10086:name:zhangjingqi" : "s"
    }


然后将HashMap<String, String>改为HashMap<String, Object>,并且使用ObjectMapper的writeValueAsString方法将值转换为JSON字符串时,将键和值都转换为字符串,以确保双引号不会被去掉。代码如下:

@Data
@Component
@ConfigurationProperties(prefix = "usedefinedyaml.path")
public class UserDefineMapConfig {
    private HashMap<String, Object> userDefinedResult;
}

// 输出
String json = objectMapper.writeValueAsString(
    Collections.singletonMap(
        "\"" + userDefineMapConfig.getUserDefinedResult().keySet().iterator().next() + "\"",
        userDefineMapConfig.getUserDefinedResult().values().iterator().next().toString()
    )
);
System.out.println(json);


这将输出你想要的JSON字符串:

{"id":"10086","name":"zhangjingqi"}: "s"