diff --git a/panel/models/json.ts b/panel/models/json.ts index 8e4ac077f1..4499c45904 100644 --- a/panel/models/json.ts +++ b/panel/models/json.ts @@ -15,7 +15,7 @@ export class JSONView extends PanelMarkupView { render(): void { super.render(); - const text = this.model.text.replace(/(\r\n|\n|\r)/gm, "").replace("'", '"') + const text = this.model.text.replace(/(\r\n|\n|\r)/gm, "") let json; try { json = window.JSON.parse(text) diff --git a/panel/pane/markup.py b/panel/pane/markup.py index ba1190d149..87dd99c651 100644 --- a/panel/pane/markup.py +++ b/panel/pane/markup.py @@ -338,10 +338,11 @@ def applies(cls, obj, **params): def _get_properties(self): properties = super()._get_properties() - if isinstance(self.object, string_types): - text = self.object - else: - text = json.dumps(self.object or {}, cls=self.encoder) + try: + data = json.loads(self.object) + except Exception: + data = self.object + text = json.dumps(data or {}, cls=self.encoder) depth = None if self.depth < 0 else self.depth return dict(text=text, theme=self.theme, depth=depth, hover_preview=self.hover_preview, **properties) diff --git a/panel/tests/pane/test_markup.py b/panel/tests/pane/test_markup.py index d77f3d3b99..eac19f4efe 100644 --- a/panel/tests/pane/test_markup.py +++ b/panel/tests/pane/test_markup.py @@ -205,6 +205,22 @@ def test_json_pane(document, comm): assert model.text == '{"b": 3}' assert pane._models[model.ref['id']][0] is model + pane.object = {"test": "can't show this"} + assert model.text == '{"test": "can\'t show this"}' + assert pane._models[model.ref['id']][0] is model + + pane.object = ["can't show this"] + assert model.text == '["can\'t show this"]' + assert pane._models[model.ref['id']][0] is model + + pane.object = "can't show this" + assert model.text == '"can\'t show this"' + assert pane._models[model.ref['id']][0] is model + + pane.object = "can show this" + assert model.text == '"can show this"' + assert pane._models[model.ref['id']][0] is model + # Cleanup pane._cleanup(model) assert pane._models == {}