diff --git a/homeassistant/util/template.py b/homeassistant/util/template.py
index 37eed7ad3f5cdfbd105e36a61547abb596894787..107532db776062fca9e4f338957680c4bdc5d80b 100644
--- a/homeassistant/util/template.py
+++ b/homeassistant/util/template.py
@@ -5,9 +5,24 @@ homeassistant.util.template
 Template utility methods for rendering strings with HA data.
 """
 # pylint: disable=too-few-public-methods
+import json
 from jinja2.sandbox import ImmutableSandboxedEnvironment
 
 
+def render_with_possible_json_value(hass, template, value):
+    """ Renders template with value exposed.
+        If valid JSON will expose value_json too. """
+    variables = {
+        'value': value
+    }
+    try:
+        variables['value_json'] = json.loads(value)
+    except ValueError:
+        pass
+
+    return render(hass, template, variables)
+
+
 def render(hass, template, variables=None, **kwargs):
     """ Render given template. """
     if variables is not None:
diff --git a/tests/util/test_template.py b/tests/util/test_template.py
index e85ed6dbba6cfe4ba78b4da2f05953e17d72290f..5c1dfff1f85acdc925f0808baaee7fd3f8e9ba18 100644
--- a/tests/util/test_template.py
+++ b/tests/util/test_template.py
@@ -72,3 +72,15 @@ class TestUtilTemplate(unittest.TestCase):
     def test_passing_vars_as_vars(self):
         self.assertEqual(
             '127', template.render(self.hass, '{{ hello }}', {'hello': 127}))
+
+    def test_render_with_possible_json_value_with_valid_json(self):
+        self.assertEqual(
+            'world',
+            template.render_with_possible_json_value(
+                self.hass, '{{ value_json.hello }}', '{"hello": "world"}'))
+
+    def test_render_with_possible_json_value_with_invalid_json(self):
+        self.assertEqual(
+            '',
+            template.render_with_possible_json_value(
+                self.hass, '{{ value_json }}', '{ I AM NOT JSON }'))