[Vue.js] Pretty Print JSON String


Demo

Paste any valid JSON string in the following textarea. You will see the result of pretty print on the fly.

{{ jsonstr | pretty }}

Source Code and Explanation

HTML:

<div id="vueapp">
  <textarea v-model="jsonstr" rows="8" cols="40"></textarea>
  <pre>{{ jsonstr | pretty }}</pre>
</div>

<script src="https://unpkg.com/vue@2.2.4/dist/vue.js"></script>

The idea is simple. We implement a Vue.js filter to pretty print the string in the textarea. According to the answer in [2], the built-in JavaScript JSON.stringify method can help us pretty print the JSON string, so in the filter, JSON.parse the string first and then JSON.stringify it again.

JavaScript:

'use strict';

new Vue({
  el: '#vueapp',
  data: {
    jsonstr: '{"id":1,"name":"A green door","price":12.50,"tags":["home","green"]}'
  },
  filters: {
    pretty: function(value) {
      return JSON.stringify(JSON.parse(value), null, 2);
    }
  }
})

Tested on:

  • Chromium Version 56.0.2924.76 Built on Ubuntu , running on Ubuntu 16.10 (64-bit)
  • Vue.js 2.2.4

References:

[1]
[2]How can I pretty-print JSON using JavaScript? - Stack Overflow