Conversione di una stringa in oggetto JSON


149

Come pensi che JS pensi che una stringa sia JSON?

Ho una funzione che funziona solo se l'oggetto JSON viene passato ad esso. Se gli passo una stringa, con lo stesso formato di JSON, non funziona. Quindi voglio far pensare a quella funzione che la stringa passata ad essa è un JSON. La stringa è effettivamente nel formato JSON.

Ho anche provato quanto segue. Ho inserito la stringa tramite Ajax, con il parametro "handle as" come "JSON", e poi quando ho passato il risultato alla funzione funziona.

Quindi ho dedotto che il problema non è con la stringa. Come posso convertire questa stringa in JSON? Se ottengo la stessa stringa attraverso la richiesta Ajax e poi passandola alla funzione funziona, mentre passare direttamente non funziona.

La stringa è la seguente:

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

and closing braces..


2
Il tuo titolo è fuorviante. In base al contenuto della tua domanda, preferirei dire che vuoi convertire una stringa contenente JSON in un oggetto / array JavaScript.
Felix Kling,

OK l'ho risolto. C'era un \ n nella stringa. Ora devi solo capire come usare JSON.parse con questo.
Zer0,

Ok l'ho risolto. Vai a jsonlint.com e metti la tua stringa lì. Se dice che è corretto, allora puoi usare JSONParse per ottenere lo stesso.
Zer0

Nel caso in cui qualcuno legga questo, si suppone che il titolo "converta una stringa JSON in un oggetto"
Chris G

Risposte:


354
var obj = JSON.parse(string);

Dov'è la stringtua stringa JSON.


Questo non funziona. Sta generando un errore "SyntaxError: JSON.parse: carattere imprevisto". Non c'è niente di sbagliato nella stringa di quando ottengo la stessa stringa attraverso una richiesta Ajax e la gestisco come "JSON", non si verificano problemi.
Zer0,

pubblica la tua stringa JSON
acuta

{"data": [{id ": - ti stai perdendo una doppia citazione qui, cioè iniziando una doppia citazione di id
Kshitij l'

2
Quando lo ottengo tramite Ajax funziona come allora gestisce la risposta come JSON. Quindi penso di doverlo convertire in un oggetto JSON ..
Zer0

2
Ho finito per andare su jsonlint.com e assicurarmi che il mio Json abbia ragione
Zer0

26

Puoi usarlo JSON.parse()per quello.

Vedi i documenti su MDN

Esempio:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);

1
Questo non funziona. Sta generando un errore "SyntaxError: JSON.parse: carattere imprevisto". Non c'è niente di sbagliato nella stringa di quando ottengo la stessa stringa attraverso una richiesta Ajax e la gestisco come "JSON", non si verificano problemi.
Zer0,

2
@ Zer0: dovresti aggiornare la tua domanda su come la stai provando insieme alla tua stringa json.
Sarfraz,

4
@ Zer0: possiamo solo rispondere al meglio delle nostre conoscenze. Dici di avere una stringa JSON, rispondiamo di conseguenza. Sembra che la tua stringa sia diversa, se la pubblichi, possiamo rispondere tenendo conto di ciò. Se fai una domanda sulla codifica, allora codice / dati sono indispensabili.
Felix Kling,

7

Ho avuto lo stesso problema con una stringa simile alla tua

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

Il problema qui è la struttura della stringa. Il parser json non riconosceva la necessità di creare 2 oggetti in questo caso. Quindi quello che ho fatto è stato un po 'sciocco, ho semplicemente ri-strutturato la mia stringa e ho aggiunto []con questo il parser riconosciuto

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

Spero che sia d'aiuto,

Se qualcuno ha un approccio più elegante, per favore condividi.


Nel tuo codice sopra, hai costruito in myStringmodo errato. Non è una stringa ed è JSON formattato in modo errato. La tua seconda riga diventerebbe quindi ridondante. Ecco cosa dovrebbe essere: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' so che questo è un post piuttosto vecchio, ma ho pensato di aggiungere un po 'di chiarezza nel caso qualcuno lo trovasse.
James Eberhardt,

Ho risolto il mio problema utilizzando $.parseJSONdove JSON.parsenon funzionava e JSON.parse is not a function
generando


3

converti la stringa in HashMap usando Object Mapper ...

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

Internamente Map si comporterà come JSON Object


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

Passa la variabile stringa nell'analisi Json:

Objdata= Json.parse(Data);

Nel tuo esempio, Dataè già un oggetto, quindi non sarebbe necessario analizzarlo. Avresti bisogno di alcune virgolette che circondano tutti i tuoi dati per renderlo una stringa.
James Eberhardt,


0

JSON.parse() la funzione lo farà.

o

Utilizzando Jquery,

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

0

Consideriamo che hai una stringa come

esempio: "nome: lucy, età: 21, genere: femmina"

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);

`

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.