Java 操作yaml和json之间的互相转换
2017-06-28 14:16
453 查看
需求:
Java 操作,通过标准的json格式,生成yaml文件,然后再读取yaml文件修改里面的某(多)个变量值(gte,lte,interval,min,max),然后再生成新的json,json格式前后都一样,就是为了修改里面的某些变量值,所以用yaml作为中间桥梁
通过yaml生成的json格式:
生成的yaml格式:
在控制台打印出来的yaml格式是这种,但是写入到yaml文件的格式是上面那种(可能是语法问题),但是两种yaml格式生成的json都是一样的
工具类和main函数
Aggs.java的实体
Query.java的实体
pom.xml
Java 操作,通过标准的json格式,生成yaml文件,然后再读取yaml文件修改里面的某(多)个变量值(gte,lte,interval,min,max),然后再生成新的json,json格式前后都一样,就是为了修改里面的某些变量值,所以用yaml作为中间桥梁
通过yaml生成的json格式:
{ "size": 0, "query": { "constant_score": { "filter": { "range": { "last_updated": { "gte": 1497283200000, "lte": 1497928996980 } } } } }, "aggs": { "by_time": { "date_histogram": { "field": "last_updated", "interval": "21526566ms", "extended_bounds": { "min": "1497283200000", "max": "1497928996980" } }, "aggs": { "event_status_group": { "filters": { "filters": { "info": { "match_phrase": { "alert_status": "info" } }, "warning": { "match_phrase": { "alert_status": "warning" } }, "error": { "match_phrase": { "alert_status": "error" } }, "success": { "match_phrase": { "alert_status": "success" } } } } } } } } }
生成的yaml格式:
size: 0 query: constant_score: filter: range: last_updated: {gte: 1497283200000, lte: 1497928996980} aggs: by_time: date_histogram: field: last_updated interval: 21526566ms extended_bounds: {min: '1497283200000', max: '1497928996980'} aggs: event_status_group: filters: filters: info: match_phrase: {alert_status: info} warning: match_phrase: {alert_status: warning} error: match_phrase: {alert_status: error} success: match_phrase: {alert_status: success}
在控制台打印出来的yaml格式是这种,但是写入到yaml文件的格式是上面那种(可能是语法问题),但是两种yaml格式生成的json都是一样的
size: 0 query: constant_score: filter: range: last_updated: gte: 1234567899999 lte: 1111111111111 aggs: by_time: date_histogram: field: "last_updated" interval: "21526566ms" extended_bounds: min: "1497283200000" max: "1497928996980" aggs: event_status_group: filters: filters: info: match_phrase: alert_status: "info" warning: match_phrase: alert_status: "warning" error: match_phrase: alert_status: "error" success: match_phrase: alert_status: "success"
工具类和main函数
package com.mdl.yaml; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Map; import org.yaml.snakeyaml.Yaml; import com.esotericsoftware.yamlbeans.YamlException; import com.esotericsoftware.yamlbeans.YamlReader; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import com.google.gson.Gson; import com.mdl.yaml.bean.Aggs; import com.mdl.yaml.bean.Query; public class TestYaml { public static void main(String[] args) { // readJsonAndCreateYaml("conf/param.json","conf/patam123.yaml"); // yamlToJson("conf/file.yaml"); String result = getJsonParam("conf/file.yaml", 111111, 22222222, "333333", "4444444", "1000"); System.out.println("\n" + "所有数据修改之后--1" + "\n" + result); } /** * 獲取并設置yaml的值 * * @param url */ @SuppressWarnings({ "unchecked", "rawtypes" }) public static String getJsonParam(String yaml_url, long lte, long gte, String max, String min, String interval) { Map map = returnMapFromYaml(yaml_url); Gson gs = new Gson(); // 设置最后一次更新的起止时间 String queryStr = gs.toJson((Map) map.get("query")); // size的默认为0 map.put("size", 0); Query q = (Query) gs.fromJson(queryStr, Query.class); q.getConstant_score().getFilter().getRange().getLast_updated().setLte(lte); q.getConstant_score().getFilter().getRange().getLast_updated().setGte(gte); ((Map) ((Map) map).get("query")).put("constant_score", q.getConstant_score()); // 设置bounds的最大最小时间 String aggstr = gs.toJson((Map) map.get("aggs")); Aggs a = (Aggs) gs.fromJson(aggstr, Aggs.class); a.getBy_time().getDate_histogram().getExtended_bounds().setMax(max); a.getBy_time().getDate_histogram().getExtended_bounds().setMin(min); a.getBy_time().getDate_histogram().setInterval(interval); ((Map) ((Map) ((Map) map).get("aggs")).get("by_time")).put("date_histogram", a.getBy_time().getDate_histogram()); return gs.toJson(map); } /** * 讀取json并生成yaml */ public static void readJsonAndCreateYaml(String json_url,String yaml_url) { try { String param = readJson(json_url); createYaml(yaml_url,param); } catch (Exception e) { e.printStackTrace(); } } /** * 將json轉化為yaml格式并生成yaml文件 * @param jsonString * @return * @throws JsonProcessingException * @throws IOException */ @SuppressWarnings("unchecked") public static void createYaml(String yaml_url,String jsonString) throws JsonProcessingException, IOException { // parse JSON JsonNode jsonNodeTree = new ObjectMapper().readTree(jsonString); // save it as YAML String jsonAsYaml = new YAMLMapper().writeValueAsString(jsonNodeTree); Yaml yaml = new Yaml(); Map<String,Object> map = (Map<String, Object>) yaml.load(jsonAsYaml); createYamlFile(yaml_url, map); } /** * 将数据写入yaml文件 * @param url yaml文件路径 * @param data 需要写入的数据 */ public static void createYamlFile(String url,Map<String, Object> data){ Yaml yaml = new Yaml(); FileWriter writer; try { writer = new FileWriter(url); yaml.dump(data, writer); } catch (IOException e) { e.printStackTrace(); } } /** * 讀取json文件并返回字符串 * * @param url * @return * @throws Exception */ @SuppressWarnings("resource") public static String readJson(String url) throws Exception { File file = new File(url); FileReader fileReader = new FileReader(file); BufferedReader bufReader = new BufferedReader(fileReader); String message = new String(); String line = null; while ((line = bufReader.readLine()) != null) { message += line; } return message; } /** * 方法一 * * 讀取yaml生成Map并返回 * * @param file * @return */ @SuppressWarnings("unchecked") public static Map<String, Object> yamlToMap(String yaml_url) { Map<String, Object> loaded = null; try { FileInputStream fis = new FileInputStream(yaml_url); Yaml yaml = new Yaml(); loaded = (Map<String, Object>) yaml.load(fis); } catch (FileNotFoundException ex) { ex.printStackTrace(); } return loaded; } /** * 方法二 * * 读取yaml的内容并转为map * @param url * @return */ @SuppressWarnings("rawtypes") public static Map returnMapFromYaml(String yaml_url) { YamlReader reader; Object object = null; Map map = null; try { reader = new YamlReader(new FileReader(yaml_url)); object = reader.read(); map = (Map) object; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (YamlException e) { e.printStackTrace(); } return map; } /** * 讀取yaml生成json并返回 * * @param file * @return */ @SuppressWarnings("unchecked") public static String yamlToJson(String file) { Gson gs = new Gson(); Map<String, Object> loaded = null; try { FileInputStream fis = new FileInputStream(file); Yaml yaml = new Yaml(); loaded = (Map<String, Object>) yaml.load(fis); } catch (FileNotFoundException ex) { ex.printStackTrace(); } return gs.toJson(loaded); } // /** // * demo // * 生成yaml格式的string,并寫入yaml文件 // */ // public static void testDumpWriterforyaml() { // Map<String, Object> data = new HashMap<String, Object>(); // data.put("name", "Silenthand Olleander"); // data.put("race", "Human"); // data.put("traits", new String[] { "ONE_HAND", "ONE_EYE" }); // // Yaml yaml = new Yaml(); // FileWriter writer; // try { // writer = new FileWriter("conf/param123.yaml"); // yaml.dump(data, writer); // } catch (IOException e) { // e.printStackTrace(); // } // } // // /** // * 打印生成yaml格式的string // */ // public static void testDump() { // Map<String, Object> data = new HashMap<String, Object>(); // data.put("name", "Silenthand Olleander"); // data.put("race", "Human"); // data.put("traits", new String[] { "ONE_HAND", "ONE_EYE" }); // Yaml yaml = new Yaml(); // String output = yaml.dump(data); // System.out.println(output); // } // // /** // * 打印生成yaml格式的string // */ // public static void printDumpWriter() { // Map<String, Object> data = new HashMap<String, Object>(); // data.put("name", "Silenthand Olleander"); // data.put("race", "Human"); // data.put("traits", new String[] { "ONE_HAND", "ONE_EYE" }); // Yaml yaml = new Yaml(); // StringWriter writer = new StringWriter(); // yaml.dump(data, writer); // System.out.println(writer.toString()); // } }
Aggs.java的实体
package com.mdl.yaml.bean; public class Aggs { private ByTime by_time; public ByTime getBy_time() { return by_time; } public void setBy_time(ByTime by_time) { this.by_time = by_time; } public class ByTime{ private DateHistogram date_histogram; public DateHistogram getDate_histogram() { return date_histogram; } public void setDate_histogram(DateHistogram date_histogram) { this.date_histogram = date_histogram; } } public class DateHistogram { private String field; private String interval; private ExtendedBounds extended_bounds; public String getField() { return field; } public void setField(String field) { this.field = field; } public String getInterval() { return interval; } public void setInterval(String interval) { this.interval = interval; } public ExtendedBounds getExtended_bounds() { return extended_bounds; } public void setExtended_bounds(ExtendedBounds extended_bounds) { this.extended_bounds = extended_bounds; } } public class ExtendedBounds{ private String min; private String max; public String getMin() { return min; } public void setMin(String min) { this.min = min; } public String getMax() { return max; } public void setMax(String max) { this.max = max; } } }
Query.java的实体
package com.mdl.yaml.bean; public class Query { private ConstantScore constant_score; public ConstantScore getConstant_score() { return constant_score; } public void setConstant_score(ConstantScore constant_score) { this.constant_score = constant_score; } public class ConstantScore{ private Filter filter; public Filter getFilter() { return filter; } public void setFilter(Filter filter) { this.filter = filter; } } public class Filter{ private Range range; public Range getRange() { return range; } public void setRange(Range range) { this.range = range; } } public class Range{ private LastUpdated last_updated; public LastUpdated getLast_updated() { return last_updated; } public void setLast_updated(LastUpdated last_updated) { this.last_updated = last_updated; } } public class LastUpdated{ private long gte; private long lte; public long getGte() { return gte; } public void setGte(long gte) { this.gte = gte; } public long getLte() { return lte; } public void setLte(long lte) { this.lte = lte; } } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>me.ele</groupId> <artifactId>elastic.util.giraffe</artifactId> <version>1.0.9-SNAPSHOT</version> <packaging>jar</packaging> <name>elastic.util.giraffe</name> <properties> <!-- Java --> <java-version>1.8</java-version> <!-- ElasticSearch --> <elasticsearch-version>2.3.0</elasticsearch-version> <!-- <elasticsearch-version>5.3.1</elasticsearch-version> --> <!-- Spring --> <spring-framework.version>4.2.1.RELEASE</spring-framework.version> </properties> <dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.6.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.18</version> </dependency> <dependency> <groupId>com.esotericsoftware.yamlbeans</groupId> <artifactId>yamlbeans</artifactId> <version>1.08</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <!-- json --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.9.0.pr4</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3</version> <configuration> <source>${java-version}</source> <target>${java-version}</target> <encoding>UTF-8</encoding> <compilerArgument>-Xlint:all</compilerArgument> <compilerArguments> <parameters/> </compilerArguments> <showWarnings>true</showWarnings> <showDeprecation>true</showDeprecation> </configuration> </plugin> </plugins> </build> <distributionManagement> <repository> <id>ele-bpm-release</id> <url>http://maven.dev.elenet.me/nexus/content/repositories/ele-bpm-release/</url> </repository> <snapshotRepository> <id>ele-bpm-snapshots</id> <url>http://maven.dev.elenet.me/nexus/content/repositories/ele-bpm-snapshots/</url> </snapshotRepository> </distributionManagement> </project>
相关文章推荐
- jsontools实现java对象与json值之间互相转换
- [分享]Java之Bean、Map、Json之间的互相转换工具类
- java对象和json对象之间互相转换例子
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换(上)
- JSON 字符串 与 java 对象之间互相转换
- JSON 字符串 与 java 对象之间互相转换
- Java对象和集合与Json之间的互相转换
- java对象和json对象之间互相转换
- (net.sf.json) java对象和json对象之间互相转换
- JAVA实现二进制和16进制之间的互相转换,8进制同理,附带异或操作实现
- java对象和json对象之间互相转换
- jsontools实现java对象与json值之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换
- java对象和json对象之间互相转换(下)
- JSON(java)之间的互相转换