谷歌网站推广排名工具,广州网站定做教程,wordpress 更换字体,做奢侈品的网站文章目录 一、概述二、思路三、实现四、测试 一、概述
我们在 yaml转换成JSON、MAP、Properties 通过引入 实现了JSON、Properties、XML、YAML文件的相互转换#xff0c;具体的类、方法如下#xff1a; 上面的实现#xff0c;定义了多个类、多个方法#xff0c;使用太不… 文章目录 一、概述二、思路三、实现四、测试 一、概述
我们在 yaml转换成JSON、MAP、Properties 通过引入 实现了JSON、Properties、XML、YAML文件的相互转换具体的类、方法如下 上面的实现定义了多个类、多个方法使用太不方便迫切需要精简逻辑。
二、思路
观察上面的代码实现发现jackson对不同对象的封装主要是通过ObjectMapper的子类来进行的 以JsonUtils为例观察方法的实现
/*** JsonUtils 转换工具* * author 00fly**/
public class JsonUtils extends BaseJackson
{/*** json转properties字符串* * param jsonText* return* throws IOException*/public static String jsonToPropText(String jsonText)throws IOException{JsonNode jsonNode jsonMapper.readTree(jsonText);return javaPropsMapper.writeValueAsString(jsonNode);}/*** Json转xml字符串* * param jsonText* return* throws IOException*/public static String jsonToXml(String jsonText)throws IOException{JsonNode jsonNode jsonMapper.readTree(jsonText);return xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode);}/*** json转yaml* * param jsonText* return* throws IOException*/public static String jsonToYaml(String jsonText)throws IOException{JsonNode jsonNode jsonMapper.readTree(jsonText);return yamlMapper.writeValueAsString(jsonNode);}
}
我们发现转换方法分为2步首先将源格式数据转换为JsonNode其次再将JsonNode转换为需要的格式。
转换流程示意图如下 #mermaid-svg-v5Lqu3RlWWVPvgPN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-v5Lqu3RlWWVPvgPN .error-icon{fill:#552222;}#mermaid-svg-v5Lqu3RlWWVPvgPN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-v5Lqu3RlWWVPvgPN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-v5Lqu3RlWWVPvgPN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-v5Lqu3RlWWVPvgPN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-v5Lqu3RlWWVPvgPN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-v5Lqu3RlWWVPvgPN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-v5Lqu3RlWWVPvgPN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-v5Lqu3RlWWVPvgPN .marker.cross{stroke:#333333;}#mermaid-svg-v5Lqu3RlWWVPvgPN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-v5Lqu3RlWWVPvgPN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-v5Lqu3RlWWVPvgPN .cluster-label text{fill:#333;}#mermaid-svg-v5Lqu3RlWWVPvgPN .cluster-label span{color:#333;}#mermaid-svg-v5Lqu3RlWWVPvgPN .label text,#mermaid-svg-v5Lqu3RlWWVPvgPN span{fill:#333;color:#333;}#mermaid-svg-v5Lqu3RlWWVPvgPN .node rect,#mermaid-svg-v5Lqu3RlWWVPvgPN .node circle,#mermaid-svg-v5Lqu3RlWWVPvgPN .node ellipse,#mermaid-svg-v5Lqu3RlWWVPvgPN .node polygon,#mermaid-svg-v5Lqu3RlWWVPvgPN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-v5Lqu3RlWWVPvgPN .node .label{text-align:center;}#mermaid-svg-v5Lqu3RlWWVPvgPN .node.clickable{cursor:pointer;}#mermaid-svg-v5Lqu3RlWWVPvgPN .arrowheadPath{fill:#333333;}#mermaid-svg-v5Lqu3RlWWVPvgPN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-v5Lqu3RlWWVPvgPN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-v5Lqu3RlWWVPvgPN .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-v5Lqu3RlWWVPvgPN .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-v5Lqu3RlWWVPvgPN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-v5Lqu3RlWWVPvgPN .cluster text{fill:#333;}#mermaid-svg-v5Lqu3RlWWVPvgPN .cluster span{color:#333;}#mermaid-svg-v5Lqu3RlWWVPvgPN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-v5Lqu3RlWWVPvgPN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} JSON JsonNode Properties对象 Properties字符串 XML YAML JSON Properties对象 Properties字符串 XML YAML 三、实现
对照上面的分析我们封装的方法如下 5个xxxToJsonNode 实现了原始数据到JsonNode的转换, 5个jsonNodeToxxx实现了JsonNode到结果数据的转换
核心代码 import java.io.IOException;
import java.util.Properties;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;/*** JsonNodeUtils 转换工具* * author 00fly**/
public class JsonNodeUtils
{private static JavaPropsMapper javaPropsMapper new JavaPropsMapper();private static JsonMapper jsonMapper new JsonMapper();private static XmlMapper xmlMapper new XmlMapper();private static YAMLMapper yamlMapper new YAMLMapper();// JsonNode对象转换为JSON、PROPERTIES、XML、YAML/*** jsonNode转json字符串* * param jsonNode* return*/public static String jsonNodeToJson(JsonNode jsonNode){return jsonNode.toPrettyString();}/*** jsonNode转properties字符串* * param jsonNode* return* throws IOException*/public static String jsonNodeToPropsText(JsonNode jsonNode)throws IOException{return javaPropsMapper.writeValueAsString(jsonNode);}/*** jsonNode转properties对象* * param jsonNode* return* throws IOException*/public static Properties jsonNodeToProperties(JsonNode jsonNode)throws IOException{return javaPropsMapper.writeValueAsProperties(jsonNode);}/*** jsonNode转xml字符串* * param jsonNode* return* throws IOException*/public static String jsonNodeToXml(JsonNode jsonNode)throws IOException{return xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode);}/*** jsonNode转yaml* * param jsonNode* return* throws IOException*/public static String jsonNodeToYaml(JsonNode jsonNode)throws IOException{return yamlMapper.writeValueAsString(jsonNode);}// JSON、PROPERTIES、XML、YAML转换为JsonNode对象/*** json转JsonNode* * param jsonText* return* throws IOException*/public static JsonNode jsonToJsonNode(String jsonText)throws IOException{return jsonMapper.readTree(jsonText);}/*** properties对象转JsonNode* * param properties* return* throws IOException*/public static JsonNode propsToJsonNode(Properties properties)throws IOException{return javaPropsMapper.readPropertiesAs(properties, JsonNode.class);}/*** properties字符串转JsonNode* * param propText* return* throws IOException*/public static JsonNode propsToJsonNode(String propText)throws IOException{return javaPropsMapper.readTree(propText);}/*** xml转JsonNode* * param xmlContent* return* throws IOException*/public static JsonNode xmlToJsonNode(String xmlContent)throws IOException{return xmlMapper.readTree(xmlContent);}/*** yaml转JsonNode* * param yamlContent* return* throws IOException*/public static JsonNode yamlToJsonNode(String yamlContent)throws IOException{return yamlMapper.readTree(yamlContent);}
}
四、测试
下面的测试以json转换为propText、xml、yaml为例来说明,其他情况照猫画虎、以此类推, 能读代码的都是聪明人,哈哈!
import java.io.IOException;
import java.nio.charset.StandardCharsets;import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;import com.fly.core.utils.jackson.JsonNodeUtils;import lombok.extern.slf4j.Slf4j;/*** JsonNodeUtils测试*/
Slf4j
public class JsonNodeUtilsTest
{static String jsonText;BeforeAllpublic static void init(){try{Resource resource new ClassPathResource(data.json);jsonText IOUtils.toString(resource.getInputStream(), StandardCharsets.UTF_8);}catch (IOException e){log.error(e.getMessage(), e);}}Testpublic void jsonToPropText()throws IOException{String propText JsonNodeUtils.jsonNodeToPropsText(JsonNodeUtils.jsonToJsonNode(jsonText));log.info(jsonToPropText: {}, propText);}Testpublic void jsonToXml()throws IOException{String xml JsonNodeUtils.jsonNodeToXml(JsonNodeUtils.jsonToJsonNode(jsonText));log.info(jsonToXML: {}, xml);}Testpublic void jsonToYaml()throws IOException{String yaml JsonNodeUtils.jsonNodeToYaml(JsonNodeUtils.jsonToJsonNode(jsonText));log.info(jsonToYaml: {}, yaml);}
}
测试结果就不放出来了。 大家可以根据需要选择方案有任何问题和建议都可以向我提问讨论,大家一起进步谢谢!
-over-