这是我的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()));
读取后在控制台输出这个集合的内容如下,
该回答引用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"