diff --git a/apps/artemis/BUILD b/apps/artemis/BUILD
index 763a535..10692dd 100755
--- a/apps/artemis/BUILD
+++ b/apps/artemis/BUILD
@@ -3,7 +3,7 @@
     "@okio//jar",
     "@commons_net//jar",
     "@io_socket_client//jar",
-    "@json//jar",
+    "@minimal_json//jar",
     "@engine_io_client//jar",
     "@io_netty_netty//jar",
     "@io_netty_netty_transport//jar",
@@ -18,7 +18,7 @@
 BUNDLES = [
     "@commons_net//jar",
     "@io_socket_client//jar",
-    "@json//jar",
+    "@minimal_json//jar",
     "@engine_io_client//jar",
     "//apps/artemis:onos-apps-artemis",
     "//apps/routing-api:onos-apps-routing-api",
diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/ArtemisPacketProcessor.java b/apps/artemis/src/main/java/org/onosproject/artemis/ArtemisPacketProcessor.java
index d4cae92..ce2be24 100644
--- a/apps/artemis/src/main/java/org/onosproject/artemis/ArtemisPacketProcessor.java
+++ b/apps/artemis/src/main/java/org/onosproject/artemis/ArtemisPacketProcessor.java
@@ -16,7 +16,7 @@
 package org.onosproject.artemis;
 
 import io.netty.channel.ChannelHandlerContext;
-import org.json.JSONObject;
+import com.eclipsesource.json.JsonObject;
 import org.onosproject.artemis.impl.objects.ArtemisMessage;
 
 /**
@@ -37,5 +37,5 @@
      *
      * @param msg BGP Update message
      */
-    void processMonitorPacket(JSONObject msg);
+    void processMonitorPacket(JsonObject msg);
 }
diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisConfig.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisConfig.java
index 9d188dd..813ad16 100644
--- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisConfig.java
+++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisConfig.java
@@ -19,8 +19,7 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.google.common.collect.Streams;
-import org.json.JSONArray;
-import org.json.JSONException;
+import com.eclipsesource.json.JsonArray;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
 import org.onosproject.core.ApplicationId;
@@ -392,15 +391,11 @@
          * <code>50</code> friendly anycaster announcing our prefix
          * <code>100+i</code> BGP hijack type i (0 &lt;= i &lt;=2)
          */
-        int checkPath(JSONArray path) {
+        int checkPath(JsonArray path) {
             // TODO add MOAS check
             ArrayList<Integer> asnPath = new ArrayList<>();
-            for (int i = 0; i < path.length(); i++) {
-                try {
-                    asnPath.add(path.getInt(i));
-                } catch (JSONException e) {
-                    log.warn("checkPath", e);
-                }
+            for (int i = 0; i < path.size(); i++) {
+                asnPath.add(path.get(i).asInt());
             }
             // reverse the list to get path starting from origin
             Collections.reverse(asnPath);
diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDeaggregatorImpl.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDeaggregatorImpl.java
index a26ae30..8d61e9a 100644
--- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDeaggregatorImpl.java
+++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDeaggregatorImpl.java
@@ -23,7 +23,7 @@
 import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.util.CharsetUtil;
-import org.json.JSONObject;
+import com.eclipsesource.json.JsonObject;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.TpPort;
@@ -415,7 +415,7 @@
         }
 
         @Override
-        public void processMonitorPacket(JSONObject msg) {
+        public void processMonitorPacket(JsonObject msg) {
 
         }
     }
diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDetectorImpl.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDetectorImpl.java
index 02f9cd2..205df9e 100644
--- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDetectorImpl.java
+++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisDetectorImpl.java
@@ -16,10 +16,8 @@
 
 package org.onosproject.artemis.impl;
 
-import org.apache.commons.lang.exception.ExceptionUtils;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
+import com.eclipsesource.json.JsonObject;
+import com.eclipsesource.json.JsonArray;
 import org.onlab.packet.IpPrefix;
 import org.onosproject.artemis.ArtemisDetector;
 import org.onosproject.artemis.ArtemisEventListener;
@@ -70,30 +68,26 @@
     void handleArtemisEvent(ArtemisEvent event) {
         // If an instance was deactivated, check whether we need to roll back the upgrade.
         if (event.type().equals(ArtemisEvent.Type.BGPUPDATE_ADDED)) {
-            JSONObject take = (JSONObject) event.subject();
+            JsonObject take = (JsonObject) event.subject();
 
             log.info("Received information about monitored prefix " + take.toString());
             artemisService.getConfig().ifPresent(config ->
                     config.monitoredPrefixes().forEach(artemisPrefix -> {
-                        try {
-                            IpPrefix prefix = artemisPrefix.prefix(), receivedPrefix;
+                        IpPrefix prefix = artemisPrefix.prefix(), receivedPrefix;
 
-                            receivedPrefix = IpPrefix.valueOf(take.getString("prefix"));
+                        receivedPrefix = IpPrefix.valueOf(take.get("prefix").asString());
 
-                            if (prefix.contains(receivedPrefix)) {
-                                JSONArray path = take.getJSONArray("path");
+                        if (prefix.contains(receivedPrefix)) {
+                            JsonArray path = take.get("path").asArray();
 
-                                int state = artemisPrefix.checkPath(path);
-                                if (state >= 100) {
-                                    log.info("BGP Hijack detected; pushing prefix for hijack Deaggregation");
-                                    eventDispatcher.post(new ArtemisEvent(ArtemisEvent.Type.HIJACK_ADDED,
-                                            receivedPrefix));
-                                } else {
-                                    log.info("BGP Update is legit");
-                                }
+                            int state = artemisPrefix.checkPath(path);
+                            if (state >= 100) {
+                                log.info("BGP Hijack detected; pushing prefix for hijack Deaggregation");
+                                eventDispatcher.post(new ArtemisEvent(ArtemisEvent.Type.HIJACK_ADDED,
+                                        receivedPrefix));
+                            } else {
+                                log.info("BGP Update is legit");
                             }
-                        } catch (JSONException e) {
-                            log.error(ExceptionUtils.getFullStackTrace(e));
                         }
                     })
             );
diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisMonitorImpl.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisMonitorImpl.java
index b050448..14eb3d4 100755
--- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisMonitorImpl.java
+++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/ArtemisMonitorImpl.java
@@ -17,7 +17,7 @@
 
 import com.google.common.collect.Sets;
 import io.netty.channel.ChannelHandlerContext;
-import org.json.JSONObject;
+import com.eclipsesource.json.JsonObject;
 import org.onlab.packet.IpPrefix;
 import org.onosproject.artemis.ArtemisMonitor;
 import org.onosproject.artemis.ArtemisPacketProcessor;
@@ -79,7 +79,7 @@
         }
 
         @Override
-        public void processMonitorPacket(JSONObject msg) {
+        public void processMonitorPacket(JsonObject msg) {
             // TODO: in future maybe store the BGP Update message and propagate it to the cluster instead of Events
             eventDispatcher.post(new ArtemisEvent(ArtemisEvent.Type.BGPUPDATE_ADDED, msg));
         }
diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/ExaBgpMonitors.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/ExaBgpMonitors.java
index d645360..fd0e9c1 100644
--- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/ExaBgpMonitors.java
+++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/ExaBgpMonitors.java
@@ -17,8 +17,7 @@
 
 import io.socket.client.IO;
 import io.socket.client.Socket;
-import org.json.JSONException;
-import org.json.JSONObject;
+import com.eclipsesource.json.JsonObject;
 import org.onlab.packet.IpPrefix;
 import org.onosproject.artemis.ArtemisPacketProcessor;
 import org.onosproject.artemis.Monitors;
@@ -48,14 +47,10 @@
      * socket.io onConnect event handler.
      */
     private void onConnect() {
-        try {
-            JSONObject parameters = new JSONObject();
-            parameters.put("prefix", this.prefix);
+        JsonObject parameters = new JsonObject();
+        parameters.set("prefix", this.prefix.toString());
 
-            socket.emit("exa_subscribe", parameters);
-        } catch (JSONException e) {
-            log.warn("onConenct()", e);
-        }
+        socket.emit("exa_subscribe", parameters);
     }
 
     /**
@@ -64,10 +59,8 @@
      * @param args exabgp message
      */
     private void onExaMessage(Object[] args) {
-        JSONObject message = (JSONObject) args[0];
-
-        try {
-            if (message.getString("type").equals("A")) {
+        JsonObject message = (JsonObject) args[0];
+            if (message.get("type").asString().equals("A")) {
                 // Example of BGP Update message:
                 // {
                 //  "path":[65001],
@@ -87,9 +80,6 @@
                 // Append synchronized message to message list in memory.
                 packetProcessor.processMonitorPacket(message);
             }
-        } catch (JSONException e) {
-            log.warn("onExaMessage()", e);
-        }
     }
 
     @Override
diff --git a/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/RipeMonitors.java b/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/RipeMonitors.java
index 52025c9..b083083 100644
--- a/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/RipeMonitors.java
+++ b/apps/artemis/src/main/java/org/onosproject/artemis/impl/monitors/RipeMonitors.java
@@ -17,8 +17,7 @@
 
 import io.socket.client.IO;
 import io.socket.client.Socket;
-import org.json.JSONException;
-import org.json.JSONObject;
+import com.eclipsesource.json.JsonObject;
 import org.onlab.packet.IpPrefix;
 import org.onosproject.artemis.ArtemisPacketProcessor;
 import org.onosproject.artemis.Monitors;
@@ -48,22 +47,18 @@
      * socket.io onConnect event handler.
      */
     private void onConnect() {
-        try {
-            socket.emit("ping");
+        socket.emit("ping");
 
-            JSONObject parameters = new JSONObject();
-            parameters.put("origin", (Object) null);
-            parameters.put("type", (Object) null);
-            parameters.put("moreSpecific", true);
-            parameters.put("lessSpecific", false);
-            parameters.put("peer", (Object) null);
-            parameters.put("host", this.host);
-            parameters.put("prefix", this.prefix);
+        JsonObject parameters = new JsonObject();
+        parameters.set("origin", "");
+        parameters.set("type", "");
+        parameters.set("moreSpecific", true);
+        parameters.set("lessSpecific", false);
+        parameters.set("peer", "");
+        parameters.set("host", this.host);
+        parameters.set("prefix", this.prefix.toString());
 
-            socket.emit("ris_subscribe", parameters);
-        } catch (JSONException e) {
-            log.warn("onConnect()", e);
-        }
+        socket.emit("ris_subscribe", parameters);
     }
 
     @Override
@@ -83,34 +78,31 @@
      * @param args RIS message
      */
     private void onRisMessage(Object[] args) {
-        try {
-            JSONObject message = (JSONObject) args[0];
-            if (message.getString("type").equals("A")) {
-                // Example of BGP Update message:
-                // {
-                //  "timestamp":1488044022.97,
-                //  "prefix":"101.1.46.0/24",
-                //  "host":"rrc21",
-                //  "next_hop":"37.49.236.246",
-                //  "peer":"37.49.236.246",
-                //  "path":[2613,25091,9318,9524],
-                //  "type":"A"
-                // }
+        JsonObject message = (JsonObject) args[0];
+        if (message.get("type").asString().equals("A")) {
+            // Example of BGP Update message:
+            // {
+            //  "timestamp":1488044022.97,
+            //  "prefix":"101.1.46.0/24",
+            //  "host":"rrc21",
+            //  "next_hop":"37.49.236.246",
+            //  "peer":"37.49.236.246",
+            //  "path":[2613,25091,9318,9524],
+            //  "type":"A"
+            // }
 
-                // We want to keep only prefix and path in memory.
-                message.remove("community");
-                message.remove("timestamp");
-                message.remove("next_hop");
-                message.remove("peer");
-                message.remove("type");
-                message.remove("host");
+            // We want to keep only prefix and path in memory.
+            message.remove("community");
+            message.remove("timestamp");
+            message.remove("next_hop");
+            message.remove("peer");
+            message.remove("type");
+            message.remove("host");
 
-                // Append synchronized message to message list in memory.
-                packetProcessor.processMonitorPacket(message);
-            }
-        } catch (JSONException e) {
-            log.error("onRisMessage()", e);
+            // Append synchronized message to message list in memory.
+            packetProcessor.processMonitorPacket(message);
         }
+
         socket.emit("ping");
     }
 
diff --git a/apps/k8s-networking/BUILD b/apps/k8s-networking/BUILD
index 9729e56..d56a43f 100644
--- a/apps/k8s-networking/BUILD
+++ b/apps/k8s-networking/BUILD
@@ -3,7 +3,7 @@
     "//apps/k8s-networking/app:onos-apps-k8s-networking-app",
     "@commons_net//jar",
     "@jersey_client//jar",
-    "@json//jar",
+    "@minimal_json//jar",
     "@k8s_client//jar",
     "@k8s_model//jar",
     "@okhttp//jar",
diff --git a/apps/k8s-networking/app/BUILD b/apps/k8s-networking/app/BUILD
index 87c974e..df84aaf 100644
--- a/apps/k8s-networking/app/BUILD
+++ b/apps/k8s-networking/app/BUILD
@@ -6,7 +6,7 @@
     "//apps/k8s-networking/api:onos-apps-k8s-networking-api",
     "@commons_net//jar",
     "@jersey_client//jar",
-    "@json//jar",
+    "@minimal_json//jar",
     "@k8s_client//jar",
     "@k8s_model//jar",
     "@okhttp//jar",
diff --git a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sOpenstackIntegrationHandler.java b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sOpenstackIntegrationHandler.java
index a631c62..0a1c5de 100644
--- a/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sOpenstackIntegrationHandler.java
+++ b/apps/k8s-networking/app/src/main/java/org/onosproject/k8snetworking/impl/K8sOpenstackIntegrationHandler.java
@@ -16,8 +16,7 @@
 package org.onosproject.k8snetworking.impl;
 
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
-import org.json.JSONException;
-import org.json.JSONObject;
+import com.eclipsesource.json.JsonObject;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.LeadershipService;
 import org.onosproject.cluster.NodeId;
@@ -129,20 +128,15 @@
 
         String jsonString = "";
 
-        try {
-            jsonString = new JSONObject()
-                    .put(K8S_NODE_IP, k8sNodeIp)
-                    .put(POD_GW_IP, gatewayIp)
-                    .put(POD_CIDR, podCidr)
-                    .put(SERVICE_CIDR, SERVICE_IP_CIDR_DEFAULT)
-                    .put(OS_K8S_INT_PORT_NAME, osK8sIntPortName)
-                    .put(K8S_INT_OS_PORT_MAC, k8sIntOsPortMac)
-                    .toString();
-            log.info("push integration configuration {}", jsonString);
-        } catch (JSONException e) {
-            log.error("Failed to generate JSON string");
-            return;
-        }
+        jsonString = new JsonObject()
+                .set(K8S_NODE_IP, k8sNodeIp)
+                .set(POD_GW_IP, gatewayIp)
+                .set(POD_CIDR, podCidr)
+                .set(SERVICE_CIDR, SERVICE_IP_CIDR_DEFAULT)
+                .set(OS_K8S_INT_PORT_NAME, osK8sIntPortName)
+                .set(K8S_INT_OS_PORT_MAC, k8sIntOsPortMac)
+                .toString();
+        log.info("push integration configuration {}", jsonString);
 
         HttpAuthenticationFeature feature =
                 HttpAuthenticationFeature.basic(ONOS_USERNAME, ONOS_PASSWORD);
@@ -169,17 +163,12 @@
 
         String jsonString = "";
 
-        try {
-            jsonString = new JSONObject()
-                    .put(K8S_NODE_IP, k8sNodeIp)
-                    .put(SERVICE_CIDR, SERVICE_IP_CIDR_DEFAULT)
-                    .put(OS_K8S_EXT_PORT_NAME, osK8sExtPortName)
-                    .toString();
-            log.info("push integration configuration {}", jsonString);
-        } catch (JSONException e) {
-            log.error("Failed to generate JSON string");
-            return;
-        }
+        jsonString = new JsonObject()
+                .set(K8S_NODE_IP, k8sNodeIp)
+                .set(SERVICE_CIDR, SERVICE_IP_CIDR_DEFAULT)
+                .set(OS_K8S_EXT_PORT_NAME, osK8sExtPortName)
+                .toString();
+        log.info("push integration configuration {}", jsonString);
 
         HttpAuthenticationFeature feature =
                 HttpAuthenticationFeature.basic(ONOS_USERNAME, ONOS_PASSWORD);
diff --git a/deps/deps.json b/deps/deps.json
index d235951..e8a666e 100644
--- a/deps/deps.json
+++ b/deps/deps.json
@@ -284,7 +284,6 @@
     "mibs-net-snmp": "mvn:org.onosproject:mibbler-mibs-net-snmp:1.0-20151221.1",
     "mibs-rfc": "mvn:org.onosproject:mibbler-mibs-rfc:1.0-20151221.1",
     "io.socket-client": "mvn:io.socket:socket.io-client:jar:0.8.3",
-    "json": "mvn:org.json:json:jar:20090211",
     "engine.io-client": "mvn:io.socket:engine.io-client:jar:0.8.3",
     "org_codehaus_mojo_animal_sniffer_annotations": "mvn:org.codehaus.mojo:animal-sniffer-annotations:1.17",
 
diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl
index 0944a76..7a34201 100644
--- a/tools/build/bazel/generate_workspace.bzl
+++ b/tools/build/bazel/generate_workspace.bzl
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Tue, 8 Feb 2022 21:28:04 GMT. Do not edit this file manually. *****
+# ***** This file was auto-generated at Thu, 9 Jun 2022 15:04:07 GMT. Do not edit this file manually. *****
 # ***** Use onos-lib-gen *****
 
 load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION")
@@ -1060,12 +1060,6 @@
             jar_sha256 = "b5ccc73724f0d188ada06aff41c8bf60e0e5d4462e7980af203a20ea87bfa583",
             licenses = ["notice"],
             jar_urls = ["https://repo1.maven.org/maven2/io/socket/socket.io-client/0.8.3/socket.io-client-0.8.3.jar"],        )
-    if "json" not in native.existing_rules():
-        java_import_external(
-            name = "json",
-            jar_sha256 = "055be110a570f9cda3eba8d70a006ff46c77a048bc67868524879211c48b330a",
-            licenses = ["notice"],
-            jar_urls = ["https://repo1.maven.org/maven2/org/json/json/20090211/json-20090211.jar"],        )
     if "engine_io_client" not in native.existing_rules():
         java_import_external(
             name = "engine_io_client",
@@ -1499,7 +1493,6 @@
 artifact_map["@mibs_net_snmp//:mibs_net_snmp"] = "mvn:org.onosproject:mibbler-mibs-net-snmp:jar:1.0-20151221.1"
 artifact_map["@mibs_rfc//:mibs_rfc"] = "mvn:org.onosproject:mibbler-mibs-rfc:jar:1.0-20151221.1"
 artifact_map["@io_socket_client//:io_socket_client"] = "mvn:io.socket:socket.io-client:jar:NON-OSGI:0.8.3"
-artifact_map["@json//:json"] = "mvn:org.json:json:jar:NON-OSGI:20090211"
 artifact_map["@engine_io_client//:engine_io_client"] = "mvn:io.socket:engine.io-client:jar:NON-OSGI:0.8.3"
 artifact_map["@org_codehaus_mojo_animal_sniffer_annotations//:org_codehaus_mojo_animal_sniffer_annotations"] = "mvn:org.codehaus.mojo:animal-sniffer-annotations:jar:NON-OSGI:1.17"
 artifact_map["@com_google_api_grpc_proto_google_common_protos//:com_google_api_grpc_proto_google_common_protos"] = "mvn:com.google.api.grpc:proto-google-common-protos:jar:NON-OSGI:1.12.0"
