Validar un JSON e imprimirlo formateado

publicado por: Anonymous

Supongamos que copio en un textarea una cadena por ejemplo:

var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";

Por lo que con JSON.parse(str) parseo el string en formato JSON, pero me gustaría mostrar el resultado en un textarea o algo parecido y formateado-

Además, si modifica algo de ahí y está mal, que de un error. Algo parecido a esta web: https://jsonformatter.org/

Mi controller:

$scope.toParseJson= function (str) {
   $scope.jsonValue = str;
}

$scope.validateJson= function (str) {
   $scope.errors= JSON.parse(str);
}

Mi html

<textarea ng-change="toParseJson(str)" ng-model="str"></textarea><br>
{{errors}}<br>
<textarea ng-change="validateJson(str)" ng-model="jsonValue "></textarea>

1- ¿Cómo consigo que en el segundo textarea me aparezca ordeando con sus tabulaciones y diferenciando?

2- ¿Hay otra manera elegante de mostrar los errores?

solución

Validar un JSON

El método JSON.parse() lanza un SyntaxError si la sintaxis es inválida:

_x000D_

_x000D_

let textoJSON = '{ "hello": "world" <<<ERROR>>> "places": ["Africa", "America", "Asia", "Australia"] }',_x000D_
    objeto;_x000D_
_x000D_
try {_x000D_
    objeto = JSON.parse(textoJSON);_x000D_
    console.log('Sintaxis Correcta');_x000D_
}_x000D_
catch (error) {_x000D_
    if(error instanceof SyntaxError) {_x000D_
        let mensaje = error.message;_x000D_
        console.log('ERROR EN LA SINTAXIS:', mensaje);_x000D_
    } else {_x000D_
        throw error; // si es otro error, que lo siga lanzando_x000D_
    }_x000D_
}

_x000D_

_x000D_

_x000D_


Imprimir un JSON formateado

El método JSON.stringify() convierte un objeto a JSON, y acepta un tercer parámetro con la cantidad de espacios para usar en cada tabulación. Imprimí el resultado en un contenedor que respete los espacios en blanco (ej: un <pre> o un <textarea>).

_x000D_

_x000D_

let textoJSON = '{ "hello": "world", "places": ["Africa", "America", "Asia", "Australia"] }',_x000D_
    objeto;_x000D_
    _x000D_
//Teniendo un objeto..._x000D_
objeto = JSON.parse(textoJSON);_x000D_
_x000D_
//Lo convertimos a JSON formateado con 2 espacios_x000D_
let textoFormateado = JSON.stringify(objeto, undefined, 2);_x000D_
_x000D_
//Imprimimos_x000D_
document.write('<pre>' + textoFormateado + '</pre>');

_x000D_

_x000D_

_x000D_

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *