diff --git a/gen_led_groups.pl b/gen_led_groups.pl
index d294563..2cb82da 100755
--- a/gen_led_groups.pl
+++ b/gen_led_groups.pl
@@ -226,8 +226,19 @@
 }
 printDebug("\n======================================================================\n");
 
-# Generate the yaml file
-generateYamlFile();
+my $index = rindex($outputFile, ".");
+my $suffix = substr($outputFile, $index + 1);
+if (lc($suffix) eq "json")
+{
+    # Generate the JSON file
+    generateJSONFile();
+}
+else
+{
+    # Generate the yaml file
+    generateYamlFile();
+}
+
 #------------------------------------END OF MAIN-----------------------
 
 # Gven a '/' separated string, returns the leaf.
@@ -294,6 +305,90 @@
     close $fh;
 }
 
+sub generateJSONFile
+{
+    package LEDGroups;
+    use JSON;
+    my $JSON = JSON->new->utf8->pretty(1);
+    $JSON->convert_blessed(1);
+
+    sub led
+    {
+        my $class = shift;
+        my $self = {
+            group => shift,
+            members => shift,
+        };
+        bless $self, $class;
+        return $self;
+    }
+
+    sub member
+    {
+        my $class = shift;
+        my $self = {
+            name => shift,
+            Action => shift,
+            DutyOn => shift,
+            Period => shift,
+            Priority => shift,
+        };
+        bless $self, $class;
+        return $self;
+    }
+
+    sub TO_JSON {
+        return { %{ shift() } };
+    }
+
+    my $fileName = $outputFile;
+    open(my $fh, '>', $fileName) or die "Could not open file '$fileName' $!";
+
+    my @leds = ();
+    foreach my $group (sort keys %hashGroup)
+    {
+        my @members = ();
+        foreach my $led (sort keys %{ $hashGroup{$group} })
+        {
+            my $action;
+            my $dutyOn;
+            my $period;
+            my $priority;
+
+            if (exists $hashGroup{$group}{$led}{Action})
+            {
+                $action = $hashGroup{$group}{$led}{Action};
+                $action = substr($action, 1, length($action) - 2);
+            }
+
+            if (exists $hashGroup{$group}{$led}{DutyOn})
+            {
+                $dutyOn = $hashGroup{$group}{$led}{DutyOn};
+            }
+
+            if (exists $hashGroup{$group}{$led}{Period})
+            {
+                $period = $hashGroup{$group}{$led}{Period};
+            }
+
+            if (exists $hashGroup{$group}{$led}{Priority})
+            {
+                $priority = $hashGroup{$group}{$led}{Priority};
+                $priority = substr($priority, 1, length($priority) - 2);
+            }
+
+            my $m = member LEDGroups($led, $action, $dutyOn, $period, $priority);
+            push @members, $m;
+        }
+        my $l = led LEDGroups($group, \@members);
+        push @leds, $l;
+    }
+    my %ledJson = ('leds' => \@leds);
+    my $json = $JSON->canonical(1)->encode(\%ledJson);
+    print $fh $json;
+    close $fh;
+}
+
 # Helper function to put debug statements.
 sub printDebug
 {
