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(),
