我爱布朗熊 2023-03-11 12:16 采纳率: 77.1%
浏览 26
已结题

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了,我真不知道为什么
朋友们有没有知道这是怎么回事呀,我尝试了好几种方法都不太行

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-03-11 12:38
    关注

    该回答引用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"
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 铜与钢双金属板叠加在一起每种材料300mm长,18mm宽,4mm厚一端固定并加热至80℃,当加热端温度保持不变时另一端的稳态温度。ansys
  • ¥15 django5安装失败
  • ¥60 ios系统storm sniffer 写入http规则加密如何破解?
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上