Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Parse JSON semplice

  1. #1

    Parse JSON semplice

    Ciao ragazzi.
    Non sono molto esperto di JSON e quindi non sto riuscendo a venirne fuori...
    Spero mi possiate dare una mano.

    Ho uno chiamata Ajax che restituisce un risultato JSON nel seguente formato:
    codice:
    {  
       "stringa1":{  
          "stringa1_dettaglio1":valore1,
          "stringa2_dettaglio2":valore2
       },
       "stringa2":[  
          {  
             "stringa1_dettaglio2":valore1,
              "stringa2_dettaglio2":valore2
          }
       ]
    }
    Io ho bisogno di ricavare il valore 1 relativo a stringa1_dettaglio2.

    Ho provato così (su IE):
    var json_Obj = JSON.parse(data); (dovrebbe fare il parse, data è la response nel mio caso)
    la riga va in errore con errore "Carattere non valido".
    Cercando ho trovato la soluzione (che non mi funziona) e cioè:
    var fixedResponse = response.responseText.replace(/\\'/g, "'");
    var jsonObj = JSON.parse(fixedResponse);

    Al di là di questo problema, poi ho bisogno di salvarmi il valore 1 relativo a stringa1_dettaglio2 e salvarlo ad esempio in un tag html.
    Non riesco a farlo, mi va sempre in errore, sapete aiutarmi?
    Grazie molte

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,685
    Ciao, è difficile comprendere il problema senza vedere la reale situazione perché l'errore potrebbe essere causato da un qualsiasi carattere che rende la stringa non valida come json.

    Con l'errore "Carattere non valido" dovrebbe saltare fuori anche il punto esatto di quel carattere. Dal momento che stai usando quel particolare metodo replace(/\\'/g, "'") per cercare di risolvere, presumo che nella stringa ci siano degli apici con escape (\') che vengono sostituiti col normale apice, ma ho i miei dubbi che tale carattere generi l'errore e che tale metodo possa servire.

    Quando dici "mi va sempre in errore" si tratta dello stesso identico errore (cioè di un particolare carattere in un'eventuale specifica posizione)? Oppure si tratta di un altro errore (magari qualche altro carattere che rompe la stringa json)?

    Ripeto, se ti viene specificata la posizione esatta del carattere che genera l'errore, verifica quale sia tale carattere e se in entrambe i casi (prima e dopo l'applicazione di quel metodo) si tratta sempre dello stesso carattere oppure se l'errore è dovuto a diversi caratteri.

    E' possibile anche che ci siano diversi caratteri che invalidano la stringa json; l'errore però ti viene segnalato solo per il primo di tali caratteri. Non è detto quindi che risolvendo un primo errore non ne salti fuori uno simile dovuto magari a qualche altro carattere non valido.

    Io ho bisogno di ricavare il valore 1 relativo a stringa1_dettaglio2.
    Se il parser json non genera errori, puoi recuperare quel valore in questo modo:
    [code]var json_Obj = JSON.parse(data);
    console.log(json_Obj.stringa2[0].stringa1_dettaglio2);[code]
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao, è difficile comprendere il problema senza vedere la reale situazione perché l'errore potrebbe essere causato da un qualsiasi carattere che rende la stringa non valida come json.

    Con l'errore "Carattere non valido" dovrebbe saltare fuori anche il punto esatto di quel carattere. Dal momento che stai usando quel particolare metodo replace(/\\'/g, "'") per cercare di risolvere, presumo che nella stringa ci siano degli apici con escape (\') che vengono sostituiti col normale apice, ma ho i miei dubbi che tale carattere generi l'errore e che tale metodo possa servire.

    Quando dici "mi va sempre in errore" si tratta dello stesso identico errore (cioè di un particolare carattere in un'eventuale specifica posizione)? Oppure si tratta di un altro errore (magari qualche altro carattere che rompe la stringa json)?

    Ripeto, se ti viene specificata la posizione esatta del carattere che genera l'errore, verifica quale sia tale carattere e se in entrambe i casi (prima e dopo l'applicazione di quel metodo) si tratta sempre dello stesso carattere oppure se l'errore è dovuto a diversi caratteri.

    E' possibile anche che ci siano diversi caratteri che invalidano la stringa json; l'errore però ti viene segnalato solo per il primo di tali caratteri. Non è detto quindi che risolvendo un primo errore non ne salti fuori uno simile dovuto magari a qualche altro carattere non valido.


    Se il parser json non genera errori, puoi recuperare quel valore in questo modo:
    [code]var json_Obj = JSON.parse(data);
    console.log(json_Obj.stringa2[0].stringa1_dettaglio2);[code]
    Ciao, ti ringrazio per la risposta.
    Vedo se riesco a spiegarmi meglio...
    Ho provato a fare come dici, mi va subito in errore nel parse, la riga indicata è quella appunto del parse... ma non so dirti per quale motivo.
    Però, forse può esserti utile che i valori sono tutti tra doppi apici ossia:
    "stringa1_dettaglio1": "valore1", ecc

    Non riesco ad uscirne e dovrei arrivare ad una soluzione, quello che restituisce il JSON è esattamente come l'ho scritto...

    P.S: ho trovato qui:
    https://coredump.one/questions/29206230/invalid-character-javascript-error-while-using-jsonparse
    che magari non serve fare il parse... perchè restituisce già json, infatti stampando nel log la response mi stampa tutto il json...a quel punto ho estratto l'informazione come mi hai detto te!

    Invece per il problema dei browser sai darmi qualche indicazione (con IE funziona mentre con firefox ho sempre "Method Not Allowed")
    Ultima modifica di ectobsidian; 05-12-2018 a 08:21

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,685
    ciao
    la riga indicata è quella appunto del parse...
    Serve sapere riga e colonna che indicano la posizione esatta del/i carattere/i non validi su quella stringa json. In genere sulla console dovrebbero saltare fuori queste informazioni ma forse su IE non vengono specificate troppo bene.
    Prova magari ad usare un qualche validatore JSON e, una volta buttato lì il testo, vedi cosa salta fuori.

    Prova con questo: https://jsonformatter.curiousconcept.com/
    Chiaramente devi copiare l'esatto testo JSON originale che poi viene restituito su quella chiamata AJAX (sempre che tu possa recuperarlo in qualche modo) quindi lo incolli nel validatore e clicchi su "Process". Sotto ti dovrebbero saltare fuori tutti gli eventuali errori.

    P.S: ho trovato qui:[...]che magari non serve fare il parse... perchè restituisce già json, infatti stampando nel log la response mi stampa tutto il json...a quel punto ho estratto l'informazione come mi hai detto te!
    In quel caso si sta effettuando la chiamata AJAX usando jQuery cer cui il parsing viene fatto (comunque) in modo automatico.
    Fammi capire però, in questo caso ti sta funzionando?

    Se utilizzi jQuery potresti impostare la chiamata con l'apposito metodo .getJSON() (che sostanzialmente è una scorciatoia della funzione ajax con dataType:"json").

    Invece per il problema dei browser sai darmi qualche indicazione (con IE funziona mentre con firefox ho sempre "Method Not Allowed")
    Perdonami ma qui mi son perso. Di quale problema stai parlando esattamente? "Method Not Allowed" quando e dove ti salta fuori?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    ciao

    Serve sapere riga e colonna che indicano la posizione esatta del/i carattere/i non validi su quella stringa json. In genere sulla console dovrebbero saltare fuori queste informazioni ma forse su IE non vengono specificate troppo bene.
    Prova magari ad usare un qualche validatore JSON e, una volta buttato lì il testo, vedi cosa salta fuori.

    Prova con questo: https://jsonformatter.curiousconcept.com/
    Chiaramente devi copiare l'esatto testo JSON originale che poi viene restituito su quella chiamata AJAX (sempre che tu possa recuperarlo in qualche modo) quindi lo incolli nel validatore e clicchi su "Process". Sotto ti dovrebbero saltare fuori tutti gli eventuali errori.


    In quel caso si sta effettuando la chiamata AJAX usando jQuery cer cui il parsing viene fatto (comunque) in modo automatico.
    Fammi capire però, in questo caso ti sta funzionando?

    Se utilizzi jQuery potresti impostare la chiamata con l'apposito metodo .getJSON() (che sostanzialmente è una scorciatoia della funzione ajax con dataType:"json").


    Perdonami ma qui mi son perso. Di quale problema stai parlando esattamente? "Method Not Allowed" quando e dove ti salta fuori?
    si mi funziona perchè in ajax ho messo dataType:"json" quindi non ho fatto il parse dopo...era più facile del previsto...
    Si scusa, "Method Not Allowed" mi esce fuori quando faccio la chiamata ajax all'API... con explorer non si verifica e funziona invece...

    Invece, per aggiungere dei parametri al body della chiamata in ajax?

  6. #6
    Sto tentando di fare una post ajax aggiungendo parametri nel body:
    ho messo:

    codice:
    type: 'POST'
    ...
      data: JSON.stringify(obj), //obj è l'oggetto JSON creato da me
    ...
    success : function(response) {
    ...
    Quando eseguo la chiamata ho errore 400 e vedo nei contenuti risposta che mi mette i parametri così: {"parametro1":"valore1","parametro2":"valore2". ..}
    Questa stringa sembra essere ok, è in json come mi serve però in tipo contenuto vedo application/x-www-form-urlencoded 203,52 ms XMLHttpRequest invece di application/json...
    E quindi la chiamata è in codice 400... cosa sbaglio? La richiesta restituisce json...

    EDIT: ho trovato che in post non posso spedire in json...è vero? quindi come gli passo i parametri del body che hanno quel formato json?
    La risposta mi restituisce un json a sua volta...

    Dovrei fare una cosa di questo tipo?
    codice:
    fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
      },
      body: //qui in che formato metto? json?
    })
    Ultima modifica di ectobsidian; 05-12-2018 a 23:11

  7. #7
    Mi rispondo da solo.
    Dovrei aver risolto mettendo 'Accept': 'application/json nel header invece di quello scritto sopra...
    Così facendo gli passo l'oggetto json, la chiamata va in ok (200)!

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,685
    Mi rispondo da solo.
    Dovrei aver risolto
    bene, io mi son perso dopo il secondo post, mi fa piacere che tu sia riuscito a risolvere.
    Buon proseguimento.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.