diff --git a/cli/src/main/java/org/onosproject/cli/net/PacketProcessorsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/PacketProcessorsListCommand.java
index ced2f5c..2844b5e 100644
--- a/cli/src/main/java/org/onosproject/cli/net/PacketProcessorsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/PacketProcessorsListCommand.java
@@ -15,11 +15,16 @@
  */
 package org.onosproject.cli.net;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.packet.PacketProcessorEntry;
 import org.onosproject.net.packet.PacketService;
 
+import java.util.List;
+
 import static org.onosproject.net.packet.PacketProcessor.ADVISOR_MAX;
 import static org.onosproject.net.packet.PacketProcessor.DIRECTOR_MAX;
 
@@ -36,13 +41,27 @@
     protected void execute() {
         PacketService service = get(PacketService.class);
         if (outputJson()) {
-            // TODO: implement this
-            print("Not implemented.");
+            print("%s", json(service.getProcessors()));
         } else {
             service.getProcessors().forEach(this::print);
         }
     }
 
+    private JsonNode json(List<PacketProcessorEntry> processors) {
+        ObjectMapper mapper = new ObjectMapper();
+        ArrayNode result = mapper.createArrayNode();
+
+        for (PacketProcessorEntry p : processors) {
+            result.add(mapper.createObjectNode()
+                    .put("priority", priorityFormat(p.priority()))
+                    .put("class", p.processor().getClass().getName())
+                    .put("packets", p.invocations())
+                    .put("avgNanos", p.averageNanos()));
+        }
+
+        return result;
+    }
+
     private void print(PacketProcessorEntry entry) {
         print(FMT, priorityFormat(entry.priority()),
               entry.processor().getClass().getName(),
diff --git a/cli/src/main/java/org/onosproject/cli/net/PacketRequestsListCommand.java b/cli/src/main/java/org/onosproject/cli/net/PacketRequestsListCommand.java
index 2bf1feb..2634592 100644
--- a/cli/src/main/java/org/onosproject/cli/net/PacketRequestsListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/PacketRequestsListCommand.java
@@ -15,11 +15,16 @@
  */
 package org.onosproject.cli.net;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import org.apache.karaf.shell.commands.Command;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.packet.PacketRequest;
 import org.onosproject.net.packet.PacketService;
 
+import java.util.List;
+
 /**
  * Lists packet requests.
  */
@@ -33,13 +38,27 @@
     protected void execute() {
         PacketService service = get(PacketService.class);
         if (outputJson()) {
-            // TODO: implement this
-            print("Not implemented.");
+            print("%s", json(service.getRequests()));
         } else {
             service.getRequests().forEach(this::print);
         }
     }
 
+    private JsonNode json(List<PacketRequest> requests) {
+        ObjectMapper mapper = new ObjectMapper();
+        ArrayNode result = mapper.createArrayNode();
+
+        for (PacketRequest r : requests) {
+            result.add(mapper.createObjectNode()
+                    .put("nodeId", r.nodeId().toString())
+                    .put("appId", r.appId().name())
+                    .put("priority", r.priority().toString())
+                    .put("criteria", r.selector().criteria().toString()));
+        }
+
+        return result;
+    }
+
     private void print(PacketRequest request) {
         print(FMT, request.nodeId(), request.appId().name(), request.priority(), request.selector().criteria());
     }
