This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 8e9f69130650 CAMEL-23228: Add consistent --json output support across 
camel-jbang commands
8e9f69130650 is described below

commit 8e9f69130650973ef73863143ff5d1f35d91f79c
Author: Guillaume Nodet <[email protected]>
AuthorDate: Mon Mar 23 11:12:48 2026 +0100

    CAMEL-23228: Add consistent --json output support across camel-jbang 
commands
    
    - Move --json flag from ListProcess to ProcessWatchCommand base class
    - Add JSON output to all 26 process-related commands
    - Uses Camel's camel-util-json (Jsoner) for serialization
    - Flat JSON array of objects with camelCase field names
---
 .../core/commands/process/CamelContextStatus.java  | 72 +++++++++++++++-------
 .../core/commands/process/CamelContextTop.java     | 54 +++++++++++-----
 .../jbang/core/commands/process/CamelCount.java    | 30 ++++++---
 .../commands/process/CamelProcessorStatus.java     | 24 ++++++++
 .../commands/process/CamelRouteGroupStatus.java    | 26 ++++++++
 .../core/commands/process/CamelRouteStatus.java    | 28 +++++++++
 .../jbang/core/commands/process/ListBlocked.java   | 38 +++++++++---
 .../core/commands/process/ListCircuitBreaker.java  | 53 +++++++++++-----
 .../jbang/core/commands/process/ListConsumer.java  | 19 ++++++
 .../jbang/core/commands/process/ListEndpoint.java  | 17 +++++
 .../dsl/jbang/core/commands/process/ListEvent.java | 29 ++++++---
 .../jbang/core/commands/process/ListGroovy.java    | 39 +++++++++---
 .../jbang/core/commands/process/ListHealth.java    | 61 +++++++++++-------
 .../jbang/core/commands/process/ListInflight.java  | 46 ++++++++++----
 .../core/commands/process/ListInternalTask.java    | 51 ++++++++++-----
 .../dsl/jbang/core/commands/process/ListKafka.java | 64 ++++++++++++-------
 .../jbang/core/commands/process/ListMetric.java    | 62 +++++++++++++------
 .../core/commands/process/ListPlatformHttp.java    | 30 ++++++---
 .../jbang/core/commands/process/ListProcess.java   |  4 --
 .../jbang/core/commands/process/ListProducer.java  | 16 +++++
 .../core/commands/process/ListProperties.java      | 52 +++++++++++-----
 .../dsl/jbang/core/commands/process/ListRest.java  | 37 ++++++++---
 .../jbang/core/commands/process/ListService.java   | 54 +++++++++++-----
 .../core/commands/process/ListTransformer.java     | 19 ++++++
 .../jbang/core/commands/process/ListVariable.java  | 39 ++++++++----
 .../dsl/jbang/core/commands/process/ListVault.java | 41 ++++++++----
 .../core/commands/process/ProcessWatchCommand.java |  4 ++
 27 files changed, 752 insertions(+), 257 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
index 626facf712ea..e2955e86e36a 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextStatus.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -32,6 +33,7 @@ import org.apache.camel.dsl.jbang.core.common.VersionHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -167,29 +169,53 @@ public class CamelContextStatus extends 
ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("CAMEL").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.camelVersion),
-                    new 
Column().header("PLATFORM").dataAlign(HorizontalAlign.LEFT).with(this::getPlatform),
-                    new 
Column().header("PROFILE").dataAlign(HorizontalAlign.LEFT).with(this::getProfile),
-                    new 
Column().header("READY").dataAlign(HorizontalAlign.CENTER).with(r -> r.ready),
-                    new 
Column().header("STATUS").headerAlign(HorizontalAlign.CENTER)
-                            .with(this::getStatus),
-                    new Column().header("RELOAD").with(this::getReloaded),
-                    new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age),
-                    new Column().header("ROUTE").with(this::getRoutes),
-                    new Column().header("MSG/S").with(this::getThroughput),
-                    new Column().header("TOTAL").with(this::getTotal),
-                    new Column().header("FAIL").with(this::getFailed),
-                    new Column().header("INFLIGHT").with(this::getInflight),
-                    new Column().header("LAST").with(r -> r.last),
-                    new Column().header("SINCE-LAST").with(this::getSinceLast),
-                    new Column().header("") // empty header as we only show 
info when there is an error
-                            
.headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(70, OverflowBehaviour.NEWLINE)
-                            .with(this::getDescription))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("camelVersion", r.camelVersion);
+                    jo.put("platform", getPlatform(r));
+                    jo.put("profile", getProfile(r));
+                    jo.put("ready", r.ready);
+                    jo.put("status", getStatus(r));
+                    jo.put("reload", getReloaded(r));
+                    jo.put("age", r.age);
+                    jo.put("route", getRoutes(r));
+                    jo.put("throughput", getThroughput(r));
+                    jo.put("total", r.total);
+                    jo.put("failed", r.failed);
+                    jo.put("inflight", r.inflight);
+                    jo.put("last", r.last);
+                    jo.put("sinceLast", getSinceLast(r));
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("CAMEL").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.camelVersion),
+                        new 
Column().header("PLATFORM").dataAlign(HorizontalAlign.LEFT).with(this::getPlatform),
+                        new 
Column().header("PROFILE").dataAlign(HorizontalAlign.LEFT).with(this::getProfile),
+                        new 
Column().header("READY").dataAlign(HorizontalAlign.CENTER).with(r -> r.ready),
+                        new 
Column().header("STATUS").headerAlign(HorizontalAlign.CENTER)
+                                .with(this::getStatus),
+                        new Column().header("RELOAD").with(this::getReloaded),
+                        new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age),
+                        new Column().header("ROUTE").with(this::getRoutes),
+                        new Column().header("MSG/S").with(this::getThroughput),
+                        new Column().header("TOTAL").with(this::getTotal),
+                        new Column().header("FAIL").with(this::getFailed),
+                        new 
Column().header("INFLIGHT").with(this::getInflight),
+                        new Column().header("LAST").with(r -> r.last),
+                        new 
Column().header("SINCE-LAST").with(this::getSinceLast),
+                        new Column().header("") // empty header as we only 
show info when there is an error
+                                
.headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(70, OverflowBehaviour.NEWLINE)
+                                .with(this::getDescription))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java
index 100ff41d3621..4b67469c5ae9 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelContextTop.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.dsl.jbang.core.common.VersionHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -144,22 +146,42 @@ public class CamelContextTop extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("JAVA").dataAlign(HorizontalAlign.LEFT).with(this::getJavaVersion),
-                    new 
Column().header("CAMEL").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.camelVersion),
-                    new 
Column().header("PLATFORM").dataAlign(HorizontalAlign.LEFT).with(this::getPlatform),
-                    new 
Column().header("STATUS").headerAlign(HorizontalAlign.CENTER)
-                            .with(r -> extractState(r.state)),
-                    new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago),
-                    new 
Column().header("LOAD").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER)
-                            .with(this::getLoad),
-                    new 
Column().header("HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getHeapMemory),
-                    new 
Column().header("NON-HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getNonHeapMemory),
-                    new 
Column().header("GC").headerAlign(HorizontalAlign.CENTER).with(this::getGC),
-                    new 
Column().header("THREADS").headerAlign(HorizontalAlign.CENTER).with(this::getThreads))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("javaVersion", getJavaVersion(r));
+                    jo.put("camelVersion", r.camelVersion);
+                    jo.put("platform", getPlatform(r));
+                    jo.put("status", extractState(r.state));
+                    jo.put("age", r.ago);
+                    jo.put("load", getLoad(r));
+                    jo.put("heap", getHeapMemory(r));
+                    jo.put("nonHeap", getNonHeapMemory(r));
+                    jo.put("gc", getGC(r));
+                    jo.put("threads", getThreads(r));
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("JAVA").dataAlign(HorizontalAlign.LEFT).with(this::getJavaVersion),
+                        new 
Column().header("CAMEL").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.camelVersion),
+                        new 
Column().header("PLATFORM").dataAlign(HorizontalAlign.LEFT).with(this::getPlatform),
+                        new 
Column().header("STATUS").headerAlign(HorizontalAlign.CENTER)
+                                .with(r -> extractState(r.state)),
+                        new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago),
+                        new 
Column().header("LOAD").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.CENTER)
+                                .with(this::getLoad),
+                        new 
Column().header("HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getHeapMemory),
+                        new 
Column().header("NON-HEAP").headerAlign(HorizontalAlign.CENTER).with(this::getNonHeapMemory),
+                        new 
Column().header("GC").headerAlign(HorizontalAlign.CENTER).with(this::getGC),
+                        new 
Column().header("THREADS").headerAlign(HorizontalAlign.CENTER).with(this::getThreads))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelCount.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelCount.java
index 16f5ef89a988..6695856f9d75 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelCount.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelCount.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -30,6 +31,7 @@ import 
org.apache.camel.dsl.jbang.core.common.PidNameAgeCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -93,14 +95,26 @@ public class CamelCount extends ProcessWatchCommand {
 
         if (!total && !fail) {
             if (!rows.isEmpty()) {
-                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
-                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
-                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
-                                .with(r -> r.name),
-                        new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age),
-                        new Column().header("TOTAL").with(r -> r.total),
-                        new Column().header("FAIL").with(r -> r.failed))));
+                if (jsonOutput) {
+                    printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                        JsonObject jo = new JsonObject();
+                        jo.put("pid", r.pid);
+                        jo.put("name", r.name);
+                        jo.put("age", r.age);
+                        jo.put("total", r.total);
+                        jo.put("failed", r.failed);
+                        return jo;
+                    }).collect(Collectors.toList())));
+                } else {
+                    
printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
+                            new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                            new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                    .maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
+                                    .with(r -> r.name),
+                            new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.age),
+                            new Column().header("TOTAL").with(r -> r.total),
+                            new Column().header("FAIL").with(r -> r.failed))));
+                }
             }
         } else {
             StringBuilder builder = new StringBuilder();
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java
index 44f6d63ffa1a..3b9d8b877aa4 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelProcessorStatus.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -302,6 +303,29 @@ public class CamelProcessorStatus extends 
ProcessWatchCommand {
     }
 
     protected void printTable(List<Row> rows) {
+        if (jsonOutput) {
+            printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                JsonObject jo = new JsonObject();
+                jo.put("pid", r.pid);
+                jo.put("name", getName(r));
+                jo.put("routeId", r.routeId);
+                jo.put("group", r.group);
+                jo.put("id", getId(r));
+                jo.put("processor", r.processor);
+                jo.put("status", getStatus(r));
+                jo.put("total", r.total);
+                jo.put("failed", r.failed);
+                jo.put("inflight", r.inflight);
+                jo.put("mean", r.mean);
+                jo.put("min", r.min);
+                jo.put("max", r.max);
+                jo.put("last", r.last);
+                jo.put("delta", getDelta(r));
+                jo.put("sinceLast", getSinceLast(r));
+                return jo;
+            }).collect(Collectors.toList())));
+            return;
+        }
         printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                 new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(this::getPid),
                 new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteGroupStatus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteGroupStatus.java
index 0e5228c09d72..705559d0c95e 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteGroupStatus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteGroupStatus.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -32,6 +33,7 @@ import org.apache.camel.support.PatternHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -202,6 +204,30 @@ public class CamelRouteGroupStatus extends 
ProcessWatchCommand {
     }
 
     protected void printTable(List<Row> rows) {
+        if (jsonOutput) {
+            printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                JsonObject jo = new JsonObject();
+                jo.put("pid", r.pid);
+                jo.put("name", r.name);
+                jo.put("group", getGroup(r));
+                jo.put("routes", r.size);
+                jo.put("status", r.state);
+                jo.put("age", r.age);
+                jo.put("coverage", getCoverage(r));
+                jo.put("throughput", getThroughput(r));
+                jo.put("total", r.total);
+                jo.put("failed", r.failed);
+                jo.put("inflight", r.inflight);
+                jo.put("mean", r.mean);
+                jo.put("min", r.min);
+                jo.put("max", r.max);
+                jo.put("last", r.last);
+                jo.put("delta", getDelta(r));
+                jo.put("sinceLast", getSinceLast(r));
+                return jo;
+            }).collect(Collectors.toList())));
+            return;
+        }
         printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                 new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
                 new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java
index 84b068964686..0ace6069aedb 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/CamelRouteStatus.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -35,6 +36,7 @@ import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -257,6 +259,32 @@ public class CamelRouteStatus extends ProcessWatchCommand {
     }
 
     protected void printTable(List<Row> rows, boolean remoteVisible) {
+        if (jsonOutput) {
+            printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                JsonObject jo = new JsonObject();
+                jo.put("pid", r.pid);
+                jo.put("name", r.name);
+                jo.put("routeId", r.routeId);
+                jo.put("group", r.group);
+                jo.put("from", r.from);
+                jo.put("remote", r.remote);
+                jo.put("status", getStatus(r));
+                jo.put("age", r.age);
+                jo.put("coverage", r.coverage);
+                jo.put("throughput", getThroughput(r));
+                jo.put("total", r.total);
+                jo.put("failed", r.failed);
+                jo.put("inflight", r.inflight);
+                jo.put("mean", r.mean);
+                jo.put("min", r.min);
+                jo.put("max", r.max);
+                jo.put("last", r.last);
+                jo.put("delta", getDelta(r));
+                jo.put("sinceLast", getSinceLast(r));
+                return jo;
+            }).collect(Collectors.toList())));
+            return;
+        }
         printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                 new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
                 new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java
index f4eddc904195..6fb432f00a5f 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListBlocked.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -94,16 +96,32 @@ public class ListBlocked extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("EXCHANGE-ID").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.exchangeId),
-                    new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).maxWidth(25, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.routeId),
-                    new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(25, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.nodeId),
-                    new 
Column().header("DURATION").dataAlign(HorizontalAlign.RIGHT).with(this::getDuration))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("exchangeId", r.exchangeId);
+                    jo.put("route", r.routeId);
+                    jo.put("id", r.nodeId);
+                    jo.put("duration", getDuration(r));
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("EXCHANGE-ID").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.exchangeId),
+                        new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.routeId),
+                        new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.nodeId),
+                        new 
Column().header("DURATION").dataAlign(HorizontalAlign.RIGHT).with(this::getDuration))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java
index ed49cd22d09d..e82c941f2753 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListCircuitBreaker.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -132,22 +134,41 @@ public class ListCircuitBreaker extends 
ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("COMPONENT").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.component),
-                    new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(r -> r.routeId),
-                    new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.id),
-                    new 
Column().header("STATE").dataAlign(HorizontalAlign.LEFT).with(r -> r.state),
-                    new 
Column().header("PENDING").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
-                            .with(this::getPending),
-                    new 
Column().header("SUCCESS").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
-                            .with(this::getSuccess),
-                    new 
Column().header("FAIL").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.RIGHT)
-                            .with(this::getFailure),
-                    new 
Column().header("REJECT").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
-                            .with(this::getReject))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("component", r.component);
+                    jo.put("route", r.routeId);
+                    jo.put("id", r.id);
+                    jo.put("state", r.state);
+                    jo.put("bufferedCalls", r.bufferedCalls);
+                    jo.put("successfulCalls", r.successfulCalls);
+                    jo.put("failedCalls", r.failedCalls);
+                    jo.put("notPermittedCalls", r.notPermittedCalls);
+                    jo.put("failureRate", r.failureRate);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("COMPONENT").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.component),
+                        new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(r -> r.routeId),
+                        new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT).with(r -> r.id),
+                        new 
Column().header("STATE").dataAlign(HorizontalAlign.LEFT).with(r -> r.state),
+                        new 
Column().header("PENDING").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
+                                .with(this::getPending),
+                        new 
Column().header("SUCCESS").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
+                                .with(this::getSuccess),
+                        new 
Column().header("FAIL").headerAlign(HorizontalAlign.CENTER).dataAlign(HorizontalAlign.RIGHT)
+                                .with(this::getFailure),
+                        new 
Column().header("REJECT").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
+                                .with(this::getReject))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListConsumer.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListConsumer.java
index 45498ab0d396..5b5ec2a2b501 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListConsumer.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListConsumer.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -32,6 +33,7 @@ import org.apache.camel.support.PatternHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -167,6 +169,23 @@ public class ListConsumer extends ProcessWatchCommand {
     }
 
     protected void printTable(List<Row> rows) {
+        if (jsonOutput) {
+            printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                JsonObject jo = new JsonObject();
+                jo.put("pid", r.pid);
+                jo.put("name", r.name);
+                jo.put("age", r.age);
+                jo.put("id", r.id);
+                jo.put("status", getState(r));
+                jo.put("type", getType(r));
+                jo.put("inflight", r.inflight);
+                jo.put("poll", getTotal(r));
+                jo.put("sinceLast", getSinceLast(r));
+                jo.put("uri", r.uri);
+                return jo;
+            }).collect(Collectors.toList())));
+            return;
+        }
         printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                 new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
                 new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java
index e06df90564a9..bb85f9afa337 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -31,6 +32,7 @@ import org.apache.camel.support.PatternHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -161,6 +163,21 @@ public class ListEndpoint extends ProcessWatchCommand {
     }
 
     protected void printTable(List<Row> rows) {
+        if (jsonOutput) {
+            printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                JsonObject jo = new JsonObject();
+                jo.put("pid", r.pid);
+                jo.put("name", r.name);
+                jo.put("age", r.age);
+                jo.put("direction", r.direction);
+                jo.put("total", r.total);
+                jo.put("stub", r.stub);
+                jo.put("remote", r.remote);
+                jo.put("uri", r.endpoint);
+                return jo;
+            }).collect(Collectors.toList())));
+            return;
+        }
         printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                 new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
                 new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java
index b47115d61729..6bacad5501a3 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEvent.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -90,13 +92,26 @@ public class ListEvent extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(r -> r.type),
-                    new 
Column().header("AGE").dataAlign(HorizontalAlign.RIGHT).with(this::getTimestamp),
-                    new 
Column().header("MESSAGE").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.message))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("type", r.type);
+                    jo.put("age", getTimestamp(r));
+                    jo.put("message", r.message);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(r -> r.type),
+                        new 
Column().header("AGE").dataAlign(HorizontalAlign.RIGHT).with(this::getTimestamp),
+                        new 
Column().header("MESSAGE").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.message))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListGroovy.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListGroovy.java
index 613e5499bfed..fdc34ae24b4d 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListGroovy.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListGroovy.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -29,6 +30,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -94,16 +96,33 @@ public class ListGroovy extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("PRELOAD").headerAlign(HorizontalAlign.CENTER).with(r -> "" + 
r.preloaddCounter),
-                    new 
Column().header("COMPILE").headerAlign(HorizontalAlign.CENTER).with(r -> "" + 
r.compiledCounter),
-                    new 
Column().header("TIME").headerAlign(HorizontalAlign.CENTER).with(this::getTime),
-                    new 
Column().header("SINCE").headerAlign(HorizontalAlign.CENTER).with(this::getLast),
-                    new 
Column().header("CLASSES").headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(60, 
OverflowBehaviour.ELLIPSIS_LEFT).with(this::getClasses))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("preload", r.preloaddCounter);
+                    jo.put("compile", r.compiledCounter);
+                    jo.put("time", getTime(r));
+                    jo.put("since", getLast(r));
+                    jo.put("classes", getClasses(r));
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("PRELOAD").headerAlign(HorizontalAlign.CENTER)
+                                .with(r -> "" + r.preloaddCounter),
+                        new 
Column().header("COMPILE").headerAlign(HorizontalAlign.CENTER)
+                                .with(r -> "" + r.compiledCounter),
+                        new 
Column().header("TIME").headerAlign(HorizontalAlign.CENTER).with(this::getTime),
+                        new 
Column().header("SINCE").headerAlign(HorizontalAlign.CENTER).with(this::getLast),
+                        new 
Column().header("CLASSES").headerAlign(HorizontalAlign.LEFT).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(60, 
OverflowBehaviour.ELLIPSIS_LEFT).with(this::getClasses))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java
index a9d75a60379a..508e04c1aff6 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListHealth.java
@@ -37,6 +37,7 @@ import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -189,28 +190,44 @@ public class ListHealth extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago),
-                    new Column().header("ID").dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(this::getId),
-                    new 
Column().header("RL").minWidth(4).maxWidth(4).with(this::getLR),
-                    new 
Column().header("STATUS").headerAlign(HorizontalAlign.CENTER)
-                            .dataAlign(HorizontalAlign.CENTER)
-                            .with(r -> r.state),
-                    new 
Column().header("RATE").headerAlign(HorizontalAlign.CENTER)
-                            .dataAlign(HorizontalAlign.RIGHT)
-                            .with(this::getRate),
-                    new 
Column().header("SINCE").headerAlign(HorizontalAlign.CENTER)
-                            .dataAlign(HorizontalAlign.RIGHT)
-                            .with(this::getSince),
-                    new 
Column().header("MESSAGE").dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(80, OverflowBehaviour.NEWLINE)
-                            .with(r -> r.message))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("age", r.ago);
+                    jo.put("id", getId(r));
+                    jo.put("rl", getLR(r));
+                    jo.put("status", r.state);
+                    jo.put("rate", getRate(r));
+                    jo.put("since", getSince(r));
+                    jo.put("message", r.message);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(r -> r.ago),
+                        new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(this::getId),
+                        new 
Column().header("RL").minWidth(4).maxWidth(4).with(this::getLR),
+                        new 
Column().header("STATUS").headerAlign(HorizontalAlign.CENTER)
+                                .dataAlign(HorizontalAlign.CENTER)
+                                .with(r -> r.state),
+                        new 
Column().header("RATE").headerAlign(HorizontalAlign.CENTER)
+                                .dataAlign(HorizontalAlign.RIGHT)
+                                .with(this::getRate),
+                        new 
Column().header("SINCE").headerAlign(HorizontalAlign.CENTER)
+                                .dataAlign(HorizontalAlign.RIGHT)
+                                .with(this::getSince),
+                        new 
Column().header("MESSAGE").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(80, OverflowBehaviour.NEWLINE)
+                                .with(r -> r.message))));
+            }
         }
         if (trace) {
             var traces
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java
index 4f16fbee5a58..bccce5d732fa 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInflight.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -104,19 +106,37 @@ public class ListInflight extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("EXCHANGE-ID").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.exchangeId),
-                    new 
Column().header("REMOTE").visible(remoteVisible.get()).dataAlign(HorizontalAlign.CENTER)
-                            .with(this::getRemote),
-                    new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).maxWidth(25, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.atRouteId),
-                    new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(25, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.nodeId),
-                    new 
Column().header("ELAPSED").dataAlign(HorizontalAlign.RIGHT).with(this::getElapsed),
-                    new 
Column().header("DURATION").dataAlign(HorizontalAlign.RIGHT).with(this::getDuration))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("exchangeId", r.exchangeId);
+                    jo.put("remote", r.fromRemoteEndpoint);
+                    jo.put("route", r.atRouteId);
+                    jo.put("id", r.nodeId);
+                    jo.put("elapsed", getElapsed(r));
+                    jo.put("duration", getDuration(r));
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("EXCHANGE-ID").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.exchangeId),
+                        new 
Column().header("REMOTE").visible(remoteVisible.get()).dataAlign(HorizontalAlign.CENTER)
+                                .with(this::getRemote),
+                        new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.atRouteId),
+                        new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(25, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.nodeId),
+                        new 
Column().header("ELAPSED").dataAlign(HorizontalAlign.RIGHT).with(this::getElapsed),
+                        new 
Column().header("DURATION").dataAlign(HorizontalAlign.RIGHT).with(this::getDuration))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInternalTask.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInternalTask.java
index aab3db945234..8260ac6afd81 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInternalTask.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListInternalTask.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -97,21 +99,40 @@ public class ListInternalTask extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("TASK").dataAlign(HorizontalAlign.LEFT).with(r -> r.task),
-                    new 
Column().header("STATUS").dataAlign(HorizontalAlign.LEFT).with(r -> r.status),
-                    new 
Column().header("ATTEMPT").dataAlign(HorizontalAlign.LEFT).with(r -> "" + 
r.attempts),
-                    new 
Column().header("DELAY").dataAlign(HorizontalAlign.LEFT).with(r -> "" + 
r.delay),
-                    new 
Column().header("ELAPSED").dataAlign(HorizontalAlign.LEFT).with(this::getElapsed),
-                    new 
Column().header("FIRST").dataAlign(HorizontalAlign.LEFT).with(this::getFirst),
-                    new 
Column().header("LAST").dataAlign(HorizontalAlign.LEFT).with(this::getLast),
-                    new 
Column().header("NEXT").dataAlign(HorizontalAlign.LEFT).with(this::getNext),
-                    new 
Column().header("FAILURE").dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(140, OverflowBehaviour.NEWLINE)
-                            .with(r -> r.error))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("task", r.task);
+                    jo.put("status", r.status);
+                    jo.put("attempts", r.attempts);
+                    jo.put("delay", r.delay);
+                    jo.put("elapsed", getElapsed(r));
+                    jo.put("first", getFirst(r));
+                    jo.put("last", getLast(r));
+                    jo.put("next", getNext(r));
+                    jo.put("failure", r.error);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("TASK").dataAlign(HorizontalAlign.LEFT).with(r -> r.task),
+                        new 
Column().header("STATUS").dataAlign(HorizontalAlign.LEFT).with(r -> r.status),
+                        new 
Column().header("ATTEMPT").dataAlign(HorizontalAlign.LEFT).with(r -> "" + 
r.attempts),
+                        new 
Column().header("DELAY").dataAlign(HorizontalAlign.LEFT).with(r -> "" + 
r.delay),
+                        new 
Column().header("ELAPSED").dataAlign(HorizontalAlign.LEFT).with(this::getElapsed),
+                        new 
Column().header("FIRST").dataAlign(HorizontalAlign.LEFT).with(this::getFirst),
+                        new 
Column().header("LAST").dataAlign(HorizontalAlign.LEFT).with(this::getLast),
+                        new 
Column().header("NEXT").dataAlign(HorizontalAlign.LEFT).with(this::getNext),
+                        new 
Column().header("FAILURE").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(140, OverflowBehaviour.NEWLINE)
+                                .with(r -> r.error))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListKafka.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListKafka.java
index 8885e4828349..490a994c30fb 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListKafka.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListKafka.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -179,27 +180,48 @@ public class ListKafka extends ProcessWatchCommand {
         }
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(this::getRouteId),
-                    new 
Column().header("STATUS").dataAlign(HorizontalAlign.LEFT).with(this::getState),
-                    new 
Column().header("GROUP-ID").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.groupId),
-                    new 
Column().header("TOPIC").dataAlign(HorizontalAlign.RIGHT).with(r -> 
r.lastTopic),
-                    new 
Column().header("PARTITION").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + 
r.lastPartition),
-                    new 
Column().header("OFFSET").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + 
r.lastOffset),
-                    new 
Column().header("COMMITTED").visible(committed).dataAlign(HorizontalAlign.RIGHT)
-                            .with(this::getCommitted),
-                    new 
Column().header("ERROR").dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(60, OverflowBehaviour.NEWLINE)
-                            .with(this::getLastError),
-                    new 
Column().header("ENDPOINT").visible(!wideUri).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(this::getUri),
-                    new 
Column().header("ENDPOINT").visible(wideUri).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(140, OverflowBehaviour.NEWLINE)
-                            .with(this::getUri))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("route", getRouteId(r));
+                    jo.put("status", getState(r));
+                    jo.put("groupId", r.groupId);
+                    jo.put("topic", r.lastTopic);
+                    jo.put("partition", r.lastPartition);
+                    jo.put("offset", r.lastOffset);
+                    if (committed) {
+                        jo.put("committed", getCommitted(r));
+                    }
+                    jo.put("error", getLastError(r));
+                    jo.put("endpoint", getUri(r));
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(this::getRouteId),
+                        new 
Column().header("STATUS").dataAlign(HorizontalAlign.LEFT).with(this::getState),
+                        new 
Column().header("GROUP-ID").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.groupId),
+                        new 
Column().header("TOPIC").dataAlign(HorizontalAlign.RIGHT).with(r -> 
r.lastTopic),
+                        new 
Column().header("PARTITION").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + 
r.lastPartition),
+                        new 
Column().header("OFFSET").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + 
r.lastOffset),
+                        new 
Column().header("COMMITTED").visible(committed).dataAlign(HorizontalAlign.RIGHT)
+                                .with(this::getCommitted),
+                        new 
Column().header("ERROR").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(60, OverflowBehaviour.NEWLINE)
+                                .with(this::getLastError),
+                        new 
Column().header("ENDPOINT").visible(!wideUri).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(this::getUri),
+                        new 
Column().header("ENDPOINT").visible(wideUri).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(140, OverflowBehaviour.NEWLINE)
+                                .with(this::getUri))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java
index ca95c89c39f1..f7c6f1269ade 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListMetric.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.StringJoiner;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -203,26 +205,46 @@ public class ListMetric extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(r -> r.type),
-                    new 
Column().header("METRIC").dataAlign(HorizontalAlign.LEFT).maxWidth(40, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.metricName),
-                    new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT).maxWidth(40, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.metricId),
-                    new 
Column().header("VALUE").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
-                            .with(r -> getNumber(r.count)),
-                    new 
Column().header("MEAN").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
-                            .with(r -> getNumber(r.mean)),
-                    new 
Column().header("MAX").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
-                            .with(r -> getNumber(r.max)),
-                    new 
Column().header("TOTAL").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
-                            .with(r -> getNumber(r.total)),
-                    new 
Column().header("TAGS").visible(tags).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(60, OverflowBehaviour.NEWLINE)
-                            .with(r -> r.tags))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("type", r.type);
+                    jo.put("metric", r.metricName);
+                    jo.put("id", r.metricId);
+                    jo.put("value", r.count);
+                    jo.put("mean", r.mean);
+                    jo.put("max", r.max);
+                    jo.put("total", r.total);
+                    jo.put("tags", r.tags);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(r -> r.type),
+                        new 
Column().header("METRIC").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.metricName),
+                        new 
Column().header("ID").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.metricId),
+                        new 
Column().header("VALUE").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
+                                .with(r -> getNumber(r.count)),
+                        new 
Column().header("MEAN").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
+                                .with(r -> getNumber(r.mean)),
+                        new 
Column().header("MAX").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
+                                .with(r -> getNumber(r.max)),
+                        new 
Column().header("TOTAL").headerAlign(HorizontalAlign.RIGHT).dataAlign(HorizontalAlign.RIGHT)
+                                .with(r -> getNumber(r.total)),
+                        new 
Column().header("TAGS").visible(tags).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(60, OverflowBehaviour.NEWLINE)
+                                .with(r -> r.tags))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListPlatformHttp.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListPlatformHttp.java
index 8c63a8fef0f1..cdabe64a1101 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListPlatformHttp.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListPlatformHttp.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.StringJoiner;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -118,13 +120,27 @@ public class ListPlatformHttp extends ProcessWatchCommand 
{
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("URL").dataAlign(HorizontalAlign.LEFT).with(r -> r.url),
-                    new 
Column().header("METHOD").dataAlign(HorizontalAlign.LEFT).with(r -> r.verbs),
-                    new 
Column().header("CONTENT-TYPE").dataAlign(HorizontalAlign.LEFT).with(this::getContent))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("url", r.url);
+                    jo.put("method", r.verbs);
+                    jo.put("consumes", r.consumes);
+                    jo.put("produces", r.produces);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("URL").dataAlign(HorizontalAlign.LEFT).with(r -> r.url),
+                        new 
Column().header("METHOD").dataAlign(HorizontalAlign.LEFT).with(r -> r.verbs),
+                        new 
Column().header("CONTENT-TYPE").dataAlign(HorizontalAlign.LEFT).with(this::getContent))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
index 4881e6d98d70..d1d68372ec82 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
@@ -53,10 +53,6 @@ public class ListProcess extends ProcessWatchCommand {
                         description = "List only pid in the output")
     boolean pid;
 
-    @CommandLine.Option(names = { "--json" },
-                        description = "Output in JSON Format")
-    boolean jsonOutput;
-
     public ListProcess(CamelJBangMain main) {
         super(main);
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProducer.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProducer.java
index c19723fe8929..98bb30161abe 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProducer.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProducer.java
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.jbang.core.commands.process;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -31,6 +32,7 @@ import org.apache.camel.support.PatternHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -136,6 +138,20 @@ public class ListProducer extends ProcessWatchCommand {
     }
 
     protected void printTable(List<Row> rows) {
+        if (jsonOutput) {
+            printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                JsonObject jo = new JsonObject();
+                jo.put("pid", r.pid);
+                jo.put("name", r.name);
+                jo.put("age", r.age);
+                jo.put("id", r.id);
+                jo.put("status", getState(r));
+                jo.put("type", getType(r));
+                jo.put("uri", r.uri);
+                return jo;
+            }).collect(Collectors.toList())));
+            return;
+        }
         printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                 new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
                 new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java
index 92809ff0285d..c2130dd622a6 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProperties.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -31,6 +32,7 @@ import org.apache.camel.util.SensitiveUtils;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -133,22 +135,40 @@ public class ListProperties extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("LOCATION").dataAlign(HorizontalAlign.LEFT).maxWidth(80, 
OverflowBehaviour.NEWLINE)
-                            .with(r -> r.loc),
-                    new 
Column().header("KEY").dataAlign(HorizontalAlign.LEFT).maxWidth(50, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.key),
-                    new 
Column().header("VALUE").dataAlign(HorizontalAlign.LEFT).maxWidth(80, 
OverflowBehaviour.NEWLINE)
-                            .with(r -> "" + r.value),
-                    new 
Column().header("FUNCTION").visible(verbose).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(this::getFunction),
-                    new Column().header("ORIGINAL 
VALUE").visible(verbose).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(80, OverflowBehaviour.NEWLINE)
-                            .with(r -> "" + r.originalValue))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("location", r.loc);
+                    jo.put("key", r.key);
+                    jo.put("value", "" + r.value);
+                    jo.put("function", getFunction(r));
+                    jo.put("originalValue", "" + r.originalValue);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("LOCATION").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(80, OverflowBehaviour.NEWLINE)
+                                .with(r -> r.loc),
+                        new 
Column().header("KEY").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.key),
+                        new 
Column().header("VALUE").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(80, OverflowBehaviour.NEWLINE)
+                                .with(r -> "" + r.value),
+                        new 
Column().header("FUNCTION").visible(verbose).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(this::getFunction),
+                        new Column().header("ORIGINAL 
VALUE").visible(verbose).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(80, OverflowBehaviour.NEWLINE)
+                                .with(r -> "" + r.originalValue))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListRest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListRest.java
index 31ff9e539e76..5c277debad0b 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListRest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListRest.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 import java.util.StringJoiner;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -32,6 +33,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -102,16 +104,31 @@ public class ListRest extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("URL").dataAlign(HorizontalAlign.LEFT).with(r -> r.url),
-                    new 
Column().header("METHOD").dataAlign(HorizontalAlign.LEFT).with(r -> r.method),
-                    new 
Column().header("FIRST").visible(verbose).dataAlign(HorizontalAlign.LEFT).with(this::getKind),
-                    new 
Column().header("DESCRIPTION").visible(verbose).maxWidth(40, 
OverflowBehaviour.NEWLINE)
-                            .dataAlign(HorizontalAlign.LEFT).with(r -> 
r.description),
-                    new 
Column().header("CONTENT-TYPE").dataAlign(HorizontalAlign.LEFT).with(this::getContent))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("url", r.url);
+                    jo.put("method", r.method);
+                    jo.put("consumes", r.consumes);
+                    jo.put("produces", r.produces);
+                    jo.put("description", r.description);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("URL").dataAlign(HorizontalAlign.LEFT).with(r -> r.url),
+                        new 
Column().header("METHOD").dataAlign(HorizontalAlign.LEFT).with(r -> r.method),
+                        new 
Column().header("FIRST").visible(verbose).dataAlign(HorizontalAlign.LEFT).with(this::getKind),
+                        new 
Column().header("DESCRIPTION").visible(verbose).maxWidth(40, 
OverflowBehaviour.NEWLINE)
+                                .dataAlign(HorizontalAlign.LEFT).with(r -> 
r.description),
+                        new 
Column().header("CONTENT-TYPE").dataAlign(HorizontalAlign.LEFT).with(this::getContent))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java
index c98f55ad10e7..4a70bed96302 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListService.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.StringJoiner;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -31,6 +32,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -112,23 +114,41 @@ public class ListService extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("COMPONENT").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.component),
-                    new 
Column().header("DIR").dataAlign(HorizontalAlign.LEFT).with(r -> r.direction),
-                    new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(this::getRouteId),
-                    new 
Column().header("PROTOCOL").dataAlign(HorizontalAlign.LEFT).with(this::getProtocol),
-                    new 
Column().header("SERVICE").dataAlign(HorizontalAlign.LEFT).with(this::getService),
-                    new 
Column().header("METADATA").visible(metadata).dataAlign(HorizontalAlign.LEFT).with(this::getMetadata),
-                    new 
Column().header("TOTAL").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + 
r.hits),
-                    new 
Column().header("ENDPOINT").visible(!wideUri).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(this::getUri),
-                    new 
Column().header("ENDPOINT").visible(wideUri).dataAlign(HorizontalAlign.LEFT)
-                            .maxWidth(140, OverflowBehaviour.NEWLINE)
-                            .with(this::getUri))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("component", r.component);
+                    jo.put("direction", r.direction);
+                    jo.put("routeId", getRouteId(r));
+                    jo.put("protocol", getProtocol(r));
+                    jo.put("service", getService(r));
+                    jo.put("total", r.hits);
+                    jo.put("endpoint", r.endpointUri);
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("COMPONENT").dataAlign(HorizontalAlign.LEFT).with(r -> 
r.component),
+                        new 
Column().header("DIR").dataAlign(HorizontalAlign.LEFT).with(r -> r.direction),
+                        new 
Column().header("ROUTE").dataAlign(HorizontalAlign.LEFT).with(this::getRouteId),
+                        new 
Column().header("PROTOCOL").dataAlign(HorizontalAlign.LEFT).with(this::getProtocol),
+                        new 
Column().header("SERVICE").dataAlign(HorizontalAlign.LEFT).with(this::getService),
+                        new 
Column().header("METADATA").visible(metadata).dataAlign(HorizontalAlign.LEFT)
+                                .with(this::getMetadata),
+                        new 
Column().header("TOTAL").dataAlign(HorizontalAlign.RIGHT).with(r -> "" + 
r.hits),
+                        new 
Column().header("ENDPOINT").visible(!wideUri).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(this::getUri),
+                        new 
Column().header("ENDPOINT").visible(wideUri).dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(140, OverflowBehaviour.NEWLINE)
+                                .with(this::getUri))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTransformer.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTransformer.java
index cb66c00d342d..dfd20b89b233 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTransformer.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTransformer.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -56,6 +58,10 @@ public class ListTransformer extends ProcessBaseCommand {
                         description = "Sort by pid, name, age or total", 
defaultValue = "pid")
     String sort;
 
+    @CommandLine.Option(names = { "--json" },
+                        description = "Output in JSON Format")
+    boolean jsonOutput;
+
     public ListTransformer(CamelJBangMain main) {
         super(main);
     }
@@ -104,6 +110,19 @@ public class ListTransformer extends ProcessBaseCommand {
     }
 
     protected void printTable(List<Row> rows) {
+        if (jsonOutput) {
+            printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                JsonObject jo = new JsonObject();
+                jo.put("pid", r.pid);
+                jo.put("name", r.name);
+                jo.put("age", r.age);
+                jo.put("dataType", r.dataTypeName);
+                jo.put("from", r.dataTypeFrom);
+                jo.put("to", r.dataTypeTo);
+                return jo;
+            }).collect(Collectors.toList())));
+            return;
+        }
         printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                 new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
                 new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVariable.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVariable.java
index fe3809a40a22..5efda04fe33b 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVariable.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVariable.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -29,6 +30,7 @@ import 
org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -104,17 +106,32 @@ public class ListVariable extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(30, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("REPO").headerAlign(HorizontalAlign.CENTER).with(r -> r.id),
-                    new 
Column().header("TYPE").headerAlign(HorizontalAlign.CENTER)
-                            .maxWidth(40, 
OverflowBehaviour.ELLIPSIS_LEFT).with(r -> r.type),
-                    new 
Column().header("KEY").dataAlign(HorizontalAlign.LEFT).maxWidth(50, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.key),
-                    new 
Column().header("VALUE").headerAlign(HorizontalAlign.RIGHT).maxWidth(80, 
OverflowBehaviour.NEWLINE)
-                            .with(this::getValue))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("repo", r.id);
+                    jo.put("type", r.type);
+                    jo.put("key", r.key);
+                    jo.put("value", getValue(r));
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(30, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("REPO").headerAlign(HorizontalAlign.CENTER).with(r -> r.id),
+                        new 
Column().header("TYPE").headerAlign(HorizontalAlign.CENTER)
+                                .maxWidth(40, 
OverflowBehaviour.ELLIPSIS_LEFT).with(r -> r.type),
+                        new 
Column().header("KEY").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(50, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.key),
+                        new 
Column().header("VALUE").headerAlign(HorizontalAlign.RIGHT).maxWidth(80, 
OverflowBehaviour.NEWLINE)
+                                .with(this::getValue))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java
index 5269b0c3cab2..8acb4a6ba2b6 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
 import com.github.freva.asciitable.Column;
@@ -30,6 +31,7 @@ import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 
@@ -187,17 +189,34 @@ public class ListVault extends ProcessWatchCommand {
         rows.sort(this::sortRow);
 
         if (!rows.isEmpty()) {
-            printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
-                    new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT).maxWidth(40, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.name),
-                    new 
Column().header("VAULT").dataAlign(HorizontalAlign.LEFT).with(r -> r.vault),
-                    new 
Column().header("REGION").dataAlign(HorizontalAlign.LEFT).with(r -> r.region),
-                    new 
Column().header("SECRET").dataAlign(HorizontalAlign.LEFT).maxWidth(40, 
OverflowBehaviour.ELLIPSIS_RIGHT)
-                            .with(r -> r.secret),
-                    new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(this::getAgo),
-                    new 
Column().header("UPDATE").headerAlign(HorizontalAlign.LEFT).with(this::getReloadAgo),
-                    new 
Column().header("CHECK").headerAlign(HorizontalAlign.LEFT).with(this::getCheckAgo))));
+            if (jsonOutput) {
+                printer().println(Jsoner.serialize(rows.stream().map(r -> {
+                    JsonObject jo = new JsonObject();
+                    jo.put("pid", r.pid);
+                    jo.put("name", r.name);
+                    jo.put("vault", r.vault);
+                    jo.put("region", r.region);
+                    jo.put("secret", r.secret);
+                    jo.put("age", getAgo(r));
+                    jo.put("update", getReloadAgo(r));
+                    jo.put("check", getCheckAgo(r));
+                    return jo;
+                }).collect(Collectors.toList())));
+            } else {
+                printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
+                        new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
+                        new 
Column().header("NAME").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.name),
+                        new 
Column().header("VAULT").dataAlign(HorizontalAlign.LEFT).with(r -> r.vault),
+                        new 
Column().header("REGION").dataAlign(HorizontalAlign.LEFT).with(r -> r.region),
+                        new 
Column().header("SECRET").dataAlign(HorizontalAlign.LEFT)
+                                .maxWidth(40, OverflowBehaviour.ELLIPSIS_RIGHT)
+                                .with(r -> r.secret),
+                        new 
Column().header("AGE").headerAlign(HorizontalAlign.CENTER).with(this::getAgo),
+                        new 
Column().header("UPDATE").headerAlign(HorizontalAlign.LEFT).with(this::getReloadAgo),
+                        new 
Column().header("CHECK").headerAlign(HorizontalAlign.LEFT).with(this::getCheckAgo))));
+            }
         }
 
         return 0;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessWatchCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessWatchCommand.java
index d9559a9f5a1c..ce37b306577c 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessWatchCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ProcessWatchCommand.java
@@ -34,6 +34,10 @@ abstract class ProcessWatchCommand extends 
ProcessBaseCommand {
                         description = "Execute periodically and showing output 
fullscreen")
     boolean watch;
 
+    @CommandLine.Option(names = { "--json" },
+                        description = "Output in JSON Format")
+    boolean jsonOutput;
+
     private CommandHelper.ReadConsoleTask waitUserTask;
 
     public ProcessWatchCommand(CamelJBangMain main) {

Reply via email to