javascript - crear - node js string to json



Deserializar un JSON en un objeto JavaScript (6)

Tengo una cadena en una aplicación de servidor Java a la que se accede utilizando AJAX. Se parece algo a lo siguiente:

var json = [{
    "adjacencies": [
        {
          "nodeTo": "graphnode2",
          "nodeFrom": "graphnode1",
          "data": {
            "$color": "#557EAA"
          }
        }
    ],
    "data": {
      "$color": "#EBB056",
      "$type": "triangle",
      "$dim": 9
    },
    "id": "graphnode1",
    "name": "graphnode1"
},{
    "adjacencies": [],
    "data": {
      "$color": "#EBB056",
      "$type": "triangle",
      "$dim": 9
    },
    "id": "graphnode2",
    "name": "graphnode2"
}];

Cuando se extrae la cadena del servidor, ¿hay una manera fácil de convertir esto en un objeto JavaScript vivo (o matriz)? ¿O tengo que dividir manualmente la cadena y construir mi objeto manualmente?



Answer #2

El punto central de JSON es que las cadenas JSON se pueden convertir en objetos nativos sin hacer nada. Revisa este enlace

Puede utilizar eval(string) o JSON.parse(string) .

Sin embargo, eval es arriesgado. De json.org:

La función eval es muy rápida. Sin embargo, puede compilar y ejecutar cualquier programa JavaScript, por lo que puede haber problemas de seguridad. El uso de eval se indica cuando la fuente es confiable y competente. Es mucho más seguro usar un analizador JSON. En las aplicaciones web sobre XMLHttpRequest, la comunicación se permite solo al mismo origen que proporciona esa página, por lo que es de confianza. Pero podría no ser competente. Si el servidor no es riguroso en su codificación JSON, o si no valida escrupulosamente todas sus entradas, entonces podría entregar un texto JSON no válido que podría contener un script peligroso. La función eval ejecutaría el script, desatando su malicia.


Answer #3

Los navegadores modernos soportan JSON.parse() .

var arr_from_json = JSON.parse( json_string );

En los navegadores que no lo hacen, puede incluir la biblioteca json2 .


Answer #4

Para recopilar todos los elementos de una matriz y devolver un objeto json

collectData: function (arrayElements) {

        var main = [];

        for (var i = 0; i < arrayElements.length; i++) {
            var data = {};
            this.e = arrayElements[i];            
            data.text = arrayElements[i].text;
            data.val = arrayElements[i].value;
            main[i] = data;
        }
        return main;
    },

Para analizar los mismos datos que pasamos de esta manera

dummyParse: function (json) {       
        var o = JSON.parse(json); //conerted the string into JSON object        
        $.each(o, function () {
            inner = this;
            $.each(inner, function (index) {
                alert(this.text)
            });
        });

}

Answer #5

Y si también desea que el objeto deserializado tenga funciones, puede usar mi pequeña herramienta: https://github.com/khayll/jsmix

//first you'll need to define your model
var GraphNode = function() {};
GraphNode.prototype.getType = function() {
   return this.$type;
}

var Adjacency = function() {};
Adjacency.prototype.getData =n function() {
    return this.data;
}

//then you could say:
var result = JSMix(jsonData)
    .withObject(GraphNode.prototype, "*")
    .withObject(Adjacency.prototype, "*.adjacencies")
    .build();

//and use them
console.log(result[1][0].getData());

Answer #6

Si pega la cadena en el lado del servidor en el html no necesita hacer nada:

Para Java simple en jsp:

var jsonObj=<%=jsonStringInJavaServlet%>;

Para puntales de ancho jsp:

var jsonObj=<s:property value="jsonStringInJavaServlet" escape="false" escapeHtml="false"/>;




deserialization