while (isdigit(*ends) || *ends == '.')
                ends++;
        *ends = 0;
+       if (!unit[0] || !vals[0])
+               return;
        fprintf(out, "%s\"%s\" : \"%s\"", os->first ? "" : ", ", unit, vals);
        os->first = false;
 }
        print_cgroup(config, os->cgrp ? : evsel->cgrp);
 }
 
-static void print_metric_end(struct perf_stat_config *config)
+static void print_metric_end(struct perf_stat_config *config, struct outstate *os)
 {
+       FILE *output = config->output;
+
        if (!config->metric_only)
                return;
 
-       if (config->json_output)
-               fputc('}', config->output);
-       fputc('\n', config->output);
+       if (config->json_output) {
+               if (os->first)
+                       fputs("\"metric-value\" : \"none\"", output);
+               fputc('}', output);
+       }
+       fputc('\n', output);
 }
 
 static void print_aggr(struct perf_stat_config *config,
 
                        print_counter_aggrdata(config, counter, s, os);
                }
-               print_metric_end(config);
+               print_metric_end(config, os);
        }
 }
 
 
                                print_counter_aggrdata(config, counter, s, os);
                        }
-                       print_metric_end(config);
+                       print_metric_end(config, os);
                }
        }
 }
                        printout(config, os, uval, run, ena, 1.0, counter_idx);
                }
                if (!first)
-                       print_metric_end(config);
+                       print_metric_end(config, os);
        }
 }
 
        evlist__for_each_entry(evlist, counter) {
                if (os->cgrp != counter->cgrp) {
                        if (os->cgrp != NULL)
-                               print_metric_end(config);
+                               print_metric_end(config, os);
 
                        os->cgrp = counter->cgrp;
                        print_metric_begin(config, evlist, os, /*aggr_idx=*/0);
                print_counter(config, counter, os);
        }
        if (os->cgrp)
-               print_metric_end(config);
+               print_metric_end(config, os);
 }
 
 void evlist__print_counters(struct evlist *evlist, struct perf_stat_config *config,
                        evlist__for_each_entry(evlist, counter) {
                                print_counter(config, counter, &os);
                        }
-                       print_metric_end(config);
+                       print_metric_end(config, &os);
                }
                break;
        case AGGR_NONE: