Convertir una cadena a objeto JSON

149

¿Cómo haces que JS piense que una cadena es JSON?

Tengo una función que solo funciona si se le pasa un objeto JSON. Si le paso una cadena, con el mismo formato que JSON, no funciona. Entonces quiero hacer que esa función piense que la cadena que se le pasa es un JSON. La cadena está en el formato JSON.

También probé lo siguiente. Ingresé la cadena a través de Ajax, con el parámetro "manejar como" como "JSON", y luego, cuando pasé el resultado a la función, funciona.

Entonces deduje que el problema no es con la cadena. ¿Cómo convierto esta cadena a JSON? Si obtengo la misma cadena a través de la solicitud ajax y luego pasarla a la función funciona, mientras que pasarla directamente no funciona.

La cadena es la siguiente:

  {
     "data": [
   {
  "id": "id1",
      "fields": [
        {
          "id": "name1",
          "label": "joker",
          "unit": "year"
        },
         {"id": "name2", "label": "Quantity"},
    ],
      "rows": [    data here....

and closing braces..
Zer0
fuente
1
posible duplicado de convertir
Manse
2
Tu título es engañoso. Según el contenido de su pregunta, preferiría decir que desea convertir una cadena que contiene JSON en un objeto / matriz de JavaScript.
Felix Kling
Ok, lo resolví. Había un \ n en la cadena. Ahora solo tiene que descubrir cómo usar JSON.parse con esto.
Zer0
Ok, lo arreglé. Ir a jsonlint.com y poner su cadena allí. Si dice que es correcto, puede usar JSONParse para lograr lo mismo.
Zer0
En caso de que alguien lea esto, se supone que el título es "convertir una cadena JSON en un objeto"
Chris G

Respuestas:

354
var obj = JSON.parse(string);

¿Dónde stringestá tu cadena JSON?

Kshitij
fuente
Esto no está funcionando. Está arrojando un error "SyntaxError: JSON.parse: carácter inesperado". No hay nada malo con la cadena, ya que cuando obtengo la misma cadena a través de una solicitud ajax y la manejo como "JSON", no se produce ningún problema.
Zer0
por favor publique su cadena JSON
aguda
{"data": [{id ": - falta una comilla doble aquí, es decir, comienza una comilla doble de id
Kshitij
2
Cuando lo obtengo a través de Ajax funciona, luego maneja la respuesta como JSON. Así que creo que tengo que convertir esto en un objeto JSON ..
Zer0
2
Terminé yendo a jsonlint.com y asegurándome de que mi Json tiene razón
Zer0
26

Puedes usar el JSON.parse()para eso.

Ver documentos en MDN

Ejemplo:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);
Sarfraz
fuente
1
Esto no está funcionando. Está arrojando un error "SyntaxError: JSON.parse: carácter inesperado". No hay nada malo con la cadena, ya que cuando obtengo la misma cadena a través de una solicitud ajax y la manejo como "JSON", no se produce ningún problema.
Zer0
2
@ Zer0: debe actualizar su pregunta sobre cómo lo está intentando junto con su cadena json.
Sarfraz
44
@ Zer0: Solo podemos responder a lo mejor de nuestro conocimiento. Dices que tienes una cadena JSON, respondemos en consecuencia. Parece que su cadena es diferente, si la publica, podemos responder teniendo esto en cuenta. Si hace una pregunta sobre la codificación, entonces el código / datos es indispensable.
Felix Kling
7

Tuve el mismo problema con una cadena similar a la tuya

{id:1,field1:"someField"},{id:2,field1:"someOtherField"}

El problema aquí es la estructura de la cadena. El analizador json no estaba reconociendo que necesita crear 2 objetos en este caso. Entonces, lo que hice fue un poco tonto, simplemente reestructuré mi cadena y agregué []esto con el analizador reconocido

var myString = {id:1,field1:"someField"},{id:2,field1:"someOtherField"}
myString = '[' + myString +']'
var json = $.parseJSON(myString)

Espero eso ayude,

Si alguien tiene un enfoque más elegante, por favor comparta.

Abrahán
fuente
En su código anterior, ha construido myStringincorrectamente. No es una cadena y tiene un formato JSON incorrecto. Su segunda línea se volvería redundante. Esto es lo que debería ser: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' sé que esta es una publicación bastante antigua, pero pensé que agregaría algo de claridad en caso de que alguien la encuentre.
James Eberhardt
Resolví mi problema usando $.parseJSONdonde JSON.parseno funcionaba y arrojando un errorJSON.parse is not a function
brasofilo
3

convertir la cadena a HashMap usando Object Mapper ...

new ObjectMapper().readValue(string, Map.class);

Internamente Map se comportará como un objeto JSON

Sugan V
fuente
2
var Data=[{"id": "name2", "label": "Quantity"}]

Pase la variable de cadena al análisis Json:

Objdata= Json.parse(Data);
Ankita_systematix
fuente
En su ejemplo, Dataya es un objeto, por lo que no sería necesario analizarlo. Necesitaría algunas comillas que rodeen todos sus datos para convertirlo en una cadena.
James Eberhardt
2

Simplemente use la evalfunción.

var myJson = eval(theJsibStr);
Siyavash Hamdi
fuente
eval es malvado, tenga mucho cuidado con la seguridad con este enfoque
dparker
0

JSON.parse() La función lo hará.

o

Usando Jquery,

var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );
Vinod Selvin
fuente
0

Consideremos que tienes una cadena como

ejemplo: "nombre: lucy, edad: 21, género: femenino"

function getJsonData(query){
    let arrayOfKeyValues = query.split(',');
    let modifiedArray =  new Array();
    console.log(arrayOfKeyValues);
    for(let i=0;i< arrayOfKeyValues.length;i++){
        let arrayValues = arrayOfKeyValues[i].split(':');
        let arrayString ='"'+arrayValues[0]+'"'+':'+'"'+arrayValues[1]+'"';
        modifiedArray.push(arrayString);
    }
    let jsonDataString = '{'+modifiedArray.toString()+'}';
    let jsonData = JSON.parse(jsonDataString);
    console.log(jsonData);
    console.log(typeof jsonData);
    return jsonData;
}

let query = "name:lucy,age:21,gender:female";
let response = getJsonData(query);
console.log(response);

``

Shishir
fuente