|
@@ -0,0 +1,87 @@
|
|
|
+import com.google.gson.*;
|
|
|
+
|
|
|
+public class LogicExpressionConverter {
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ String json = "{\n" +
|
|
|
+ " \"relationship\":\"and\",\n" +
|
|
|
+ " \"list\":[\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"relationship\":\"or\",\n" +
|
|
|
+ " \"list\":[\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"rule\":\"tag1 > 0\"\n" +
|
|
|
+ " },\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"rule\":\"tag2 < 2\"\n" +
|
|
|
+ " },\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"rule\":\"tag5 == 7\"\n" +
|
|
|
+ " }\n" +
|
|
|
+ " ]\n" +
|
|
|
+ " },\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"relationship\":\"and\",\n" +
|
|
|
+ " \"list\":[\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"rule\":\"tag3 == 4\"\n" +
|
|
|
+ " }\n" +
|
|
|
+ " ]\n" +
|
|
|
+ " },{\n" +
|
|
|
+ " \"relationship\":\"and\",\n" +
|
|
|
+ " \"list\":[\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"rule\":\"tag3 == 4\"\n" +
|
|
|
+ " },{\n" +
|
|
|
+ " \"relationship\":\"or\",\n" +
|
|
|
+ " \"list\":[\n" +
|
|
|
+ " {\n" +
|
|
|
+ " \"rule\":\"tag3 == 4\"\n" +
|
|
|
+ " },{\n" +
|
|
|
+ " \"rule\":\"tag4 == 5\"\n" +
|
|
|
+ " }\n" +
|
|
|
+ " ]\n" +
|
|
|
+ " }\n" +
|
|
|
+ " ]\n" +
|
|
|
+ " }\n" +
|
|
|
+ " ]\n" +
|
|
|
+ "}";
|
|
|
+ JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
|
|
|
+ String result = convertToString(jsonObject, true);
|
|
|
+ System.out.println(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static String convertToString(JsonObject obj, boolean isTopLevel) {
|
|
|
+ String relationship = obj.get("relationship").getAsString();
|
|
|
+ JsonArray list = obj.getAsJsonArray("list");
|
|
|
+ String rules = convertList(list, relationship);
|
|
|
+ if (isTopLevel) {
|
|
|
+ return rules;
|
|
|
+ } else {
|
|
|
+ return "(" + rules + ")";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static String convertList(JsonArray list, String parentRelationship) {
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ boolean isFirst = true;
|
|
|
+ for (JsonElement element : list) {
|
|
|
+ JsonObject obj = element.getAsJsonObject();
|
|
|
+ if (obj.has("list")) {
|
|
|
+ String relationship = obj.get("relationship").getAsString();
|
|
|
+ if (!isFirst) {
|
|
|
+ sb.append(" " + parentRelationship.toLowerCase() + " ");
|
|
|
+ }
|
|
|
+ sb.append("(" + convertList(obj.getAsJsonArray("list"), relationship) + ")");
|
|
|
+ } else {
|
|
|
+ String rule = obj.get("rule").getAsString();
|
|
|
+ if (!isFirst) {
|
|
|
+ sb.append(" " + parentRelationship.toLowerCase() + " ");
|
|
|
+ }
|
|
|
+ sb.append(rule);
|
|
|
+ }
|
|
|
+ isFirst = false;
|
|
|
+ }
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+}
|