diff --git a/bin/system-info.c b/bin/system-info.c
index 02f4ce0d1d0d1979746e4b16999885a52fac68e2..f331bd9834073288ff556694d58313885944cbd8 100644
--- a/bin/system-info.c
+++ b/bin/system-info.c
@@ -127,6 +127,7 @@
 
 #include <json-glib/json-glib.h>
 
+#include <steam-runtime-tools/json-utils-internal.h>
 #include <steam-runtime-tools/utils-internal.h>
 
 enum
@@ -401,24 +402,10 @@ print_libraries_details (JsonBuilder *builder,
             }
 
           missing_symbols = srt_library_get_missing_symbols (l->data);
-          if (missing_symbols[0] != NULL)
-            {
-              json_builder_set_member_name (builder, "missing-symbols");
-              json_builder_begin_array (builder);
-              for (gsize i = 0; missing_symbols[i] != NULL; i++)
-                json_builder_add_string_value (builder, missing_symbols[i]);
-              json_builder_end_array (builder);
-            }
+          _srt_json_builder_add_strv_value (builder, "missing-symbols", missing_symbols, FALSE);
 
           misversioned_symbols = srt_library_get_misversioned_symbols (l->data);
-          if (misversioned_symbols[0] != NULL)
-            {
-              json_builder_set_member_name (builder, "misversioned-symbols");
-              json_builder_begin_array (builder);
-              for (gsize i = 0; misversioned_symbols[i] != NULL; i++)
-                json_builder_add_string_value (builder, misversioned_symbols[i]);
-              json_builder_end_array (builder);
-            }
+          _srt_json_builder_add_strv_value (builder, "misversioned-symbols", misversioned_symbols, FALSE);
 
           json_builder_end_object (builder);
         }
@@ -614,8 +601,7 @@ jsonify_os_release (JsonBuilder *builder,
   json_builder_set_member_name (builder, "os-release");
   json_builder_begin_object (builder);
     {
-      GStrv strv;
-      gsize i;
+      g_auto(GStrv) strv = NULL;
       gchar *tmp;
 
       tmp = srt_system_info_dup_os_id (info);
@@ -629,17 +615,8 @@ jsonify_os_release (JsonBuilder *builder,
 
       strv = srt_system_info_dup_os_id_like (info, FALSE);
 
-      if (strv != NULL)
-        {
-          json_builder_set_member_name (builder, "id_like");
-          json_builder_begin_array (builder);
-            {
-              for (i = 0; strv[i] != NULL; i++)
-                json_builder_add_string_value (builder, strv[i]);
-            }
-          json_builder_end_array (builder);
-          g_strfreev (strv);
-        }
+      _srt_json_builder_add_strv_value (builder, "id_like", (const gchar * const *)strv,
+                                        FALSE);
 
       tmp = srt_system_info_dup_os_name (info);
 
@@ -793,6 +770,7 @@ main (int argc,
   SrtX86FeatureFlags known_x86_features = SRT_X86_FEATURE_NONE;
   g_autoptr(SrtObjectList) portal_backends = NULL;
   g_autoptr(SrtObjectList) portal_interfaces = NULL;
+  g_auto(GStrv) driver_environment = NULL;
   char *expectations = NULL;
   gboolean verbose = FALSE;
   JsonBuilder *builder;
@@ -946,22 +924,15 @@ main (int argc,
 
           json_builder_set_member_name (builder, "overrides");
           json_builder_begin_object (builder);
-          if (overrides != NULL && overrides[0] != NULL)
-            {
-              json_builder_set_member_name (builder, "list");
-              json_builder_begin_array (builder);
-              for (gsize i = 0; overrides[i] != NULL; i++)
-                json_builder_add_string_value (builder, overrides[i]);
-              json_builder_end_array (builder);
-            }
-          if (messages != NULL && messages[0] != NULL)
-            {
-              json_builder_set_member_name (builder, "messages");
-              json_builder_begin_array (builder);
-              for (gsize i = 0; messages[i] != NULL; i++)
-                json_builder_add_string_value (builder, messages[i]);
-              json_builder_end_array (builder);
-            }
+
+          _srt_json_builder_add_strv_value (builder, "list",
+                                            (const gchar * const *)overrides,
+                                            FALSE);
+
+          _srt_json_builder_add_strv_value (builder, "messages",
+                                            (const gchar * const *)messages,
+                                            FALSE);
+
           json_builder_end_object (builder);
 
           g_strfreev (overrides);
@@ -974,22 +945,15 @@ main (int argc,
 
         json_builder_set_member_name (builder, "pinned_libs_32");
         json_builder_begin_object (builder);
-        if (values != NULL && values[0] != NULL)
-          {
-            json_builder_set_member_name (builder, "list");
-            json_builder_begin_array (builder);
-            for (gsize i = 0; values[i] != NULL; i++)
-              json_builder_add_string_value (builder, values[i]);
-            json_builder_end_array (builder);
-          }
-        if (messages != NULL && messages[0] != NULL)
-          {
-            json_builder_set_member_name (builder, "messages");
-            json_builder_begin_array (builder);
-            for (gsize i = 0; messages[i] != NULL; i++)
-              json_builder_add_string_value (builder, messages[i]);
-            json_builder_end_array (builder);
-          }
+
+        _srt_json_builder_add_strv_value (builder, "list",
+                                          (const gchar * const *)values,
+                                          FALSE);
+
+        _srt_json_builder_add_strv_value (builder, "messages",
+                                          (const gchar * const *)messages,
+                                          FALSE);
+
         json_builder_end_object (builder);
 
         g_strfreev (values);
@@ -998,22 +962,15 @@ main (int argc,
 
         json_builder_set_member_name (builder, "pinned_libs_64");
         json_builder_begin_object (builder);
-        if (values != NULL && values[0] != NULL)
-          {
-            json_builder_set_member_name (builder, "list");
-            json_builder_begin_array (builder);
-            for (gsize i = 0; values[i] != NULL; i++)
-              json_builder_add_string_value (builder, values[i]);
-            json_builder_end_array (builder);
-          }
-        if (messages != NULL && messages[0] != NULL)
-          {
-            json_builder_set_member_name (builder, "messages");
-            json_builder_begin_array (builder);
-            for (gsize i = 0; messages[i] != NULL; i++)
-              json_builder_add_string_value (builder, messages[i]);
-            json_builder_end_array (builder);
-          }
+
+        _srt_json_builder_add_strv_value (builder, "list",
+                                          (const gchar * const *)values,
+                                          FALSE);
+
+        _srt_json_builder_add_strv_value (builder, "messages",
+                                          (const gchar * const *)messages,
+                                          FALSE);
+
         json_builder_end_object (builder);
 
         g_strfreev (values);
@@ -1025,19 +982,10 @@ main (int argc,
   jsonify_os_release (builder, info);
   jsonify_container (builder, info);
 
-  json_builder_set_member_name (builder, "driver_environment");
-  json_builder_begin_array (builder);
-    {
-      GStrv strv = srt_system_info_list_driver_environment (info);
-      if (strv != NULL)
-        {
-          for (gsize i = 0; strv[i] != NULL; i++)
-            json_builder_add_string_value (builder, strv[i]);
-
-          g_strfreev (strv);
-        }
-    }
-  json_builder_end_array (builder);
+  driver_environment = srt_system_info_list_driver_environment (info);
+  _srt_json_builder_add_strv_value (builder, "driver_environment",
+                                    (const gchar * const *)driver_environment,
+                                    TRUE);
 
   json_builder_set_member_name (builder, "architectures");
   json_builder_begin_object (builder);
diff --git a/steam-runtime-tools/json-utils-internal.h b/steam-runtime-tools/json-utils-internal.h
index 318290e1b4d7d82f7df4ce8c2bc8445257922225..a62f42fd004652319c1702bf2d7883dc7940b73f 100644
--- a/steam-runtime-tools/json-utils-internal.h
+++ b/steam-runtime-tools/json-utils-internal.h
@@ -46,3 +46,8 @@ gchar ** _srt_json_object_dup_strv_member (JsonObject *json_obj,
 
 gchar *_srt_json_object_dup_array_of_lines_member (JsonObject *json_obj,
                                                    const gchar *array_member);
+
+void _srt_json_builder_add_strv_value (JsonBuilder *builder,
+                                       const gchar *array_name,
+                                       const gchar * const *values,
+                                       gboolean allow_empty_array);
diff --git a/steam-runtime-tools/json-utils.c b/steam-runtime-tools/json-utils.c
index 10dfbc7f04b318812130cce618377bf2246236a7..26bae1d136566b652294bafd75cabd336d6ac12f 100644
--- a/steam-runtime-tools/json-utils.c
+++ b/steam-runtime-tools/json-utils.c
@@ -192,3 +192,36 @@ _srt_json_object_dup_array_of_lines_member (JsonObject *json_obj,
 
   return g_string_free (g_steal_pointer (&ret), FALSE);
 }
+
+/**
+ * _srt_json_builder_add_strv_value:
+ * @builder: (not nullable): A JSON Builder where the provided @values
+ *  will be appended
+ * @array_name: (not nullable): The array member name to use
+ * @values: (nullable): Array of strings to be added in the JSON Builder
+ * @allow_empty_array: If %TRUE, a new array in JSON Builder will be always
+ *  created, even if @values is %NULL or without any elements. Otherwise the
+ *  new array will be created only if there is at least a non-NULL element in
+ *  @values
+ */
+void
+_srt_json_builder_add_strv_value (JsonBuilder *builder,
+                                  const gchar *array_name,
+                                  const gchar * const *values,
+                                  gboolean allow_empty_array)
+{
+  gsize i;
+
+  g_return_if_fail (builder != NULL);
+  g_return_if_fail (array_name != NULL);
+
+  if ((values != NULL && values[0] != NULL) ||
+      allow_empty_array)
+    {
+      json_builder_set_member_name (builder, array_name);
+      json_builder_begin_array (builder);
+      for (i = 0; values != NULL && values[i] != NULL; i++)
+        json_builder_add_string_value (builder, values[i]);
+      json_builder_end_array (builder);
+    }
+}