diff --git a/yaml2json.py b/yaml2json.py
new file mode 100644
index 0000000..008f017
--- /dev/null
+++ b/yaml2json.py
@@ -0,0 +1,175 @@
+import yaml
+import json
+import os
+
+
+def matlab_json_init():
+    output_json = {
+        "sandboxExecServer": "172.17.0.1:5051",
+        "outputPath": "/tmp/joj3_result.json",
+        "stages": []
+    }
+    healthcheck_json = {
+      "name": "healthcheck",
+      "executor": {
+        "name": "sandbox",
+        "with": {
+          "default": {
+            "args": [
+              "./healthcheck",
+              "-root=.",
+              "-meta=readme",
+              "-whitelist=stderr",
+              "-whitelist=stdout",
+              "-whitelist=.*\\.toml",
+              "-whitelist=.*\\.md",
+              "-whitelist=healthcheck",
+              "-whitelist=.*\\.json",
+              "-whitelist=.git.*"
+            ],
+            "env": [
+              "PATH=/usr/bin:/bin"
+            ],
+            "cpuLimit": 10000000000,
+            "memoryLimit": 104857600,
+            "procLimit": 50,
+            "copyInDir": ".",
+            "copyIn": {
+              "healthcheck": {
+                "src": "./../../../../../../build/healthcheck",
+                "copyOut": [
+                  "stdout",
+                  "stderr"
+                ]
+              }
+            },
+            "stdin": {
+              "content": ""
+            },
+            "stdout": {
+              "name": "stdout",
+              "max": 4096
+            },
+            "stderr": {
+              "name": "stderr",
+              "max": 4096
+            }
+          }
+        }
+      },
+      "parser": {
+        "name": "healthcheck",
+        "with": {
+          "score": 10,
+          "comment": " + comment from json conf"
+        }
+      }
+    }
+    run_json = {
+                "name": "run",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                ""
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin"
+                            ],
+                            "cpuLimit": 20000000000,
+                            "memoryLimit": 104857600,
+                            "clockLimit": 40000000000,
+                            "procLimit": 50,
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            # matlab don't need this
+                            # "copyInCached": {
+                            #     "a": "a"
+                            # }
+                        },
+                        "cases": []
+                    }
+                },
+                "parser": {
+                    "name": "diff",
+                    "with": {
+                        "cases": []
+                    }
+                }
+            }
+    output_json["stages"].append(healthcheck_json)
+    output_json["stages"].append(run_json)
+    return output_json
+
+def get_cases(output_json, yaml_data):
+    for case in yaml_data['cases']:
+        print(yaml_data['cases'])
+        input_entry = {
+            "stdin":{
+                "src": case["input"]
+            }
+        }
+        output_entry = {
+            "outputs": {
+                "score": 100,
+                "fileName": "stdout",
+                "answerPath": case["output"]
+            }
+        }
+        output_json["stages"][1]["executor"]["with"]["cases"].append(input_entry)
+        output_json["stages"][1]["parser"]["with"]["cases"].append(output_entry)
+    return output_json
+
+
+# Function to merge YAML content into the JSON structure
+def yaml_to_custom_json(yaml_file, json_file):
+    # Load YAML data from the input file
+    with open(yaml_file, 'r') as f:
+        yaml_data = yaml.safe_load(f)
+
+    # Define the base JSON structure as per your example
+    output_json = matlab_json_init()
+
+    # memory limit migration
+    memory_str = yaml_data['default']['memory']
+    memory_limit = int(memory_str[:-1]) * 1024 * 1024
+    output_json["stages"][0]["executor"]["with"]["default"]["memoryLimit"] = memory_limit
+
+    # time limit migration
+    time_str = yaml_data['default']['time']
+    cpu_limit = int(time_str[:-1]) * 1000000000
+    clock_limit = 2 * cpu_limit
+    output_json['stages'][1]["executor"]["with"]["default"]["cpuLimit"] = cpu_limit
+    output_json["stages"][1]["executor"]["with"]["default"]["clockLimit"] = clock_limit
+
+    # test cases migration
+    # testcases input migration
+    # # testcases output migration
+    output_json = get_cases(output_json, yaml_data)
+    
+    # execution args migration
+    args = "octave " + assignment_name + ".m"
+    output_json["stages"][1]["executor"]["with"]["default"]["args"] = args.split()
+
+    # Write the output JSON to the specified file
+    with open(json_file, 'w') as f:
+        json.dump(output_json, f, indent=2)
+
+# i/p of files
+yaml_file = './ex4/config.yaml'  
+json_file = './output.json'
+assignment_name = "ex4"
+yaml_to_custom_json(yaml_file, json_file)
+
+print(f"YAML content has been successfully converted to JSON and saved to {json_file}")