Last active
December 20, 2018 08:15
-
-
Save jarryDk/62a2e0c2934c61520f92aca53b6cd697 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package dk.jarry.util; | |
import java.io.IOException; | |
import java.nio.file.Files; | |
import java.nio.file.Path; | |
import java.nio.file.Paths; | |
import java.nio.file.StandardOpenOption; | |
import java.util.UUID; | |
import com.fasterxml.jackson.core.JsonParseException; | |
import com.fasterxml.jackson.databind.JsonMappingException; | |
import com.fasterxml.jackson.databind.JsonNode; | |
import com.fasterxml.jackson.databind.ObjectMapper; | |
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; | |
public class Json2Yaml { | |
private Path sourcePath; | |
private Path targetPath; | |
private Boolean replace = Boolean.FALSE; | |
public Json2Yaml() { | |
} | |
public Json2Yaml(Path sourcePath) { | |
this.sourcePath = sourcePath; | |
} | |
public Json2Yaml(Path sourcePath, Path targetPath) { | |
this.sourcePath = sourcePath; | |
this.targetPath = targetPath; | |
} | |
public Json2Yaml(Path sourcePath, Path targetPath, Boolean replace) { | |
this.sourcePath = sourcePath; | |
this.targetPath = targetPath; | |
this.replace = replace; | |
} | |
public String getYamlString() throws JsonParseException, JsonMappingException, IOException { | |
if (sourcePath == null) { | |
throw new IllegalArgumentException("sourcePath is null"); | |
} | |
if (!Files.exists(sourcePath)) { | |
throw new IOException(sourcePath.toString() + " is not on disk"); | |
} | |
String jsonString = new String(Files.readAllBytes(sourcePath)); | |
return getYamlString(jsonString); | |
} | |
public String getYamlString(String jsonString) throws IOException { | |
JsonNode jsonNodeTree = new ObjectMapper().readTree(jsonString); | |
String jsonAsYaml = new YAMLMapper().writeValueAsString(jsonNodeTree); | |
return jsonAsYaml; | |
} | |
public void save() throws JsonParseException, JsonMappingException, IOException { | |
if (targetPath == null) { | |
targetPath = Paths.get(sourcePath.toString().replace(".json", ".yaml")); | |
} | |
if (Files.exists(targetPath)) { | |
if (replace) { | |
Files.delete(targetPath); | |
} else { | |
targetPath = Paths.get(targetPath.toString(), "_" + UUID.randomUUID().toString()); | |
} | |
} | |
Files.write(targetPath, getYamlString().getBytes(), StandardOpenOption.CREATE); | |
} | |
} | |
/** | |
* Add to pom.xml | |
* | |
*<dependency> | |
* <groupId>com.fasterxml.jackson.dataformat</groupId> | |
* <artifactId>jackson-dataformat-yaml</artifactId> | |
* <version>2.9.5</version> | |
*</dependency> | |
*<dependency> | |
* <groupId>com.fasterxml.jackson.core</groupId> | |
* <artifactId>jackson-databind</artifactId> | |
* <version>2.9.5</version> | |
*</dependency> | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment