diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..03744fa
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,73 @@
+.classpath
+.project
+.settings
+.idea
+.metadata
+*.iml
+*.ipr
+kong-stack.retry
+target
+.factorypath
+
+#
+# NodeJS
+#
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Typescript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..02a2143
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,70 @@
+
+
+ 4.0.0
+
+ com.ishchuk
+ converter
+ 1.0-SNAPSHOT
+
+
+
+ org.antlr
+ antlr4-runtime
+ 4.7.2
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
+
+
+
+ org.antlr
+ antlr4-maven-plugin
+ 4.7.2
+
+
+
+ antlr4
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 3.0.0
+
+
+ generate-sources
+
+ add-source
+
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ 1.8
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/antlr4/com/ishchuk/antlr4/JSONgram.g4 b/src/main/antlr4/com/ishchuk/antlr4/JSONgram.g4
new file mode 100644
index 0000000..9b2c452
--- /dev/null
+++ b/src/main/antlr4/com/ishchuk/antlr4/JSONgram.g4
@@ -0,0 +1,20 @@
+grammar JSONgram;
+
+json : content;
+
+object : '{' keyValue (',' keyValue)* '}' | '{' '}';
+table : '[' content (',' content)* ']' | '[' ']';
+keyValue : CHAINE ':' content;
+
+content: CHAINE | NUMBER | object | table | 'true' | 'false' | 'null';
+
+
+fragment INT: '0' | [1-9] [0-9]*;
+fragment EXP: [Ee] [+\-]? INT;
+
+CHAINE : '"' [a-zA-Z0-9_!@#$%^&*()\-+=/.,<>;':] [a-zA-Z0-9_!@#$%^&*()\-+=/.,<>;':]* '"' ;
+NUMBER : '-'? INT ('.' [0-9] +)? EXP?;
+
+WS : [ \t\n\r] + -> skip;
+
+
diff --git a/src/main/antlr4/com/ishchuk/antlr4/Log.g4 b/src/main/antlr4/com/ishchuk/antlr4/Log.g4
new file mode 100644
index 0000000..3ecb966
--- /dev/null
+++ b/src/main/antlr4/com/ishchuk/antlr4/Log.g4
@@ -0,0 +1,16 @@
+grammar Log;
+
+log : entry+;
+entry : timestamp ' ' level ' ' message CRLF;
+timestamp : DATE ' ' TIME;
+level : 'ERROR' | 'INFO' | 'DEBUG';
+message : (TEXT | ' ')+;
+
+fragment DIGIT : [0-9];
+fragment TWODIGIT : DIGIT DIGIT;
+fragment LETTER : [A-Za-z];
+
+DATE : TWODIGIT TWODIGIT '-' LETTER LETTER LETTER '-' TWODIGIT;
+TIME : TWODIGIT ':' TWODIGIT ':' TWODIGIT;
+TEXT : LETTER+;
+CRLF : '\r'? '\n' | '\r';
\ No newline at end of file
diff --git a/src/main/java/com/ishchuk/antlr/json/JsonListener.java b/src/main/java/com/ishchuk/antlr/json/JsonListener.java
new file mode 100644
index 0000000..84e85fb
--- /dev/null
+++ b/src/main/java/com/ishchuk/antlr/json/JsonListener.java
@@ -0,0 +1,123 @@
+package com.ishchuk.antlr.json;
+
+import com.ishchuk.antlr.json.model.*;
+import com.ishchuk.antlr4.JSONgramBaseListener;
+import com.ishchuk.antlr4.JSONgramParser;
+
+import java.util.*;
+
+
+public class JsonListener extends JSONgramBaseListener {
+
+ private JsonModel jsonFile;
+ private Map json;
+ private List var;
+ private boolean read;
+
+ @Override
+ public void enterJson(JSONgramParser.JsonContext ctx) {
+ this.jsonFile = new JsonModel();
+ this.json = new HashMap<>();
+ this.var = new ArrayList<>();
+ this.read = true;
+
+
+ }
+
+ public JsonModel getJsonFile() {
+ return this.jsonFile;
+ }
+
+ @Override
+ public void enterContent(JSONgramParser.ContentContext ctx) {
+
+ if (read && Objects.nonNull(ctx.object())) {
+ ctx.object().keyValue().forEach(kv -> {
+ JsonElement elem = new JsonElement();
+ elem.setContent(kv.content());
+ json.put(kv.CHAINE().getSymbol().getText(), elem);
+ });
+ read = false;
+ } else {
+ System.out.println("content: " + ctx.getText());
+ String parent = getParent(ctx);
+ System.out.println("parent: " + parent);
+
+
+ if (json.containsKey(parent)) {
+ System.out.println("parent in json");
+ searchMap(json, parent);
+
+ } else {
+ System.out.println("NOT in json");
+
+ json.values().forEach(kv -> {
+ if (kv instanceof JsonObject) {
+ searchMap(((JsonObject) kv).getMap(), parent);
+ } else if (kv instanceof JsonArray) {
+ ((JsonArray) kv).getArray().forEach(obj -> {
+ searchMap(obj.getMap(), parent);
+ });
+ }
+ });
+ }
+ }
+ }
+
+ private void searchMap(Map json, final String parent) {
+ if (json.containsKey(parent)) {
+ System.out.println("parent in json");
+ if (json.get(parent).getContent() instanceof JSONgramParser.ContentContext) {
+ JSONgramParser.ContentContext content =
+ (JSONgramParser.ContentContext) json.get(parent).getContent();
+ if (Objects.nonNull(content.object())) {
+ json.replace(parent, prepareJsonObject(content));
+ } else if (Objects.nonNull(content.table())) {
+ JsonArray arr = new JsonArray();
+ content.table().content().forEach(cont -> {
+ JsonObject obj = prepareJsonObject(cont);
+ arr.getArray().add(obj);
+ });
+ arr.getArray().forEach(temp -> {
+ searchMap(temp.getMap(), parent);
+ });
+ json.replace(parent, arr);
+ } else {
+ JsonPrimitive prim = new JsonPrimitive();
+ prim.setValue(content.getText());
+ json.replace(parent, prim);
+ }
+ }
+ }
+ }
+
+ private JsonObject prepareJsonObject(JSONgramParser.ContentContext cont) {
+ JsonObject obj = new JsonObject();
+ cont.object().keyValue().forEach(kv -> {
+ JsonElement elem = new JsonElement();
+ elem.setContent(kv.content());
+ obj.getMap().put(kv.CHAINE().getSymbol().getText(), elem);
+ });
+ return obj;
+ }
+
+
+ private String getParent(JSONgramParser.ContentContext ctx) {
+ String parent;
+ if (Objects.nonNull(ctx.table()) || Objects.nonNull(ctx.object())) {
+ if (ctx.getParent().children.get(0).getText().equals("[")) {
+ parent = ctx.getParent().getParent().getParent().children.get(0).getText();
+ } else {
+ parent = ctx.getParent().children.get(0).getText();
+ }
+ } else {
+ parent = ctx.getParent().children.get(0).getText();
+ }
+ return parent;
+ }
+
+
+
+
+
+}
diff --git a/src/main/java/com/ishchuk/antlr/json/model/JsonArray.java b/src/main/java/com/ishchuk/antlr/json/model/JsonArray.java
new file mode 100644
index 0000000..640cda4
--- /dev/null
+++ b/src/main/java/com/ishchuk/antlr/json/model/JsonArray.java
@@ -0,0 +1,21 @@
+package com.ishchuk.antlr.json.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class JsonArray extends JsonElement {
+
+ private List array;
+
+ public List getArray() {
+ return array;
+ }
+
+ public void setArray(List array) {
+ this.array = array;
+ }
+
+ public JsonArray() {
+ this.array = new ArrayList<>();
+ }
+}
diff --git a/src/main/java/com/ishchuk/antlr/json/model/JsonElement.java b/src/main/java/com/ishchuk/antlr/json/model/JsonElement.java
new file mode 100644
index 0000000..e89703e
--- /dev/null
+++ b/src/main/java/com/ishchuk/antlr/json/model/JsonElement.java
@@ -0,0 +1,13 @@
+package com.ishchuk.antlr.json.model;
+
+public class JsonElement {
+ private Object content;
+
+ public Object getContent() {
+ return content;
+ }
+
+ public void setContent(Object content) {
+ this.content = content;
+ }
+}
diff --git a/src/main/java/com/ishchuk/antlr/json/model/JsonModel.java b/src/main/java/com/ishchuk/antlr/json/model/JsonModel.java
new file mode 100644
index 0000000..73de968
--- /dev/null
+++ b/src/main/java/com/ishchuk/antlr/json/model/JsonModel.java
@@ -0,0 +1,22 @@
+package com.ishchuk.antlr.json.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class JsonModel {
+
+ private List