Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2021
    Messaggi
    3

    JSON con attributi numerici

    Buongiorno,
    sto creando delle funzioni che mi permettano di esportare delle pratiche da un sito esterno al mio CRM.
    La comunicazione avviene tramite un API da loro fornita e la risposta è un JSON.

    Il problema nasce nel momento in cui, creando dei campi personalizzati (oltre a quelli già esistenti sul loro sistema), quest'ultimi mi vengono comunicati usando come nome dell'attributo il suo ID.

    codice:
    [...]
    "vatCode":null,"notes":null,"attr":{"100":"ITXXXEXXXXXXXX","101":"3","103":"220"},
    [...]
    Come si vede dalla porzione di codice appena riportata "vatCode" e "notes" vengono chiamati con i loro nomi (campi di default nel loro sistema) mentre i vari campi che ho aggiunto io (attr) vengono chiamati con i loro ID (100,101,102).
    Ovviamente, quando provo ad estrapolare il loro contenuto mi genera un errore:
    codice:
    data.records[conta].lead.notes //FUNZIONA
    data.records[conta].lead.attr.100 //NON FUNZIONA
    Messaggio di errore:
    codice:
    Uncaught SyntaxError: Unexpected number
    Ho provato anche ad interpretarlo come un array:
    codice:
    data.records[conta].lead.attr[0]
     data.records[conta].lead.attr[1]
    In questo caso la console non mi genera nessun errore ma il valore che ottengo è "undefined".

    Sembra una domanda banale ma sono nuovo con i JSON e googlando il problema non ho trovato situazioni simili.
    Ringrazio anticipatamente per le risposte

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,950
    Quote Originariamente inviata da Niknex Visualizza il messaggio
    Ovviamente, quando provo ad estrapolare il loro contenuto mi genera un errore:
    codice:
    data.records[conta].lead.notes //FUNZIONA
    data.records[conta].lead.attr.100 //NON FUNZIONA
    La notazione con il punto è solo una scorciatoia con la quale si usa un nome di proprietà per indicare un campo dell'oggetto, ma questo può essere acceduto anche usando una sintassi tipo dizionario. Prova così:
    codice:
    data.records[conta].lead.attr['100']
    Ricorda che in un oggetto puoi aggiungere qualsiasi valore, anche basato su un numero come identificatore, o con un nome che contiene degli spazi: l'unico limite è quello di accedere evitando la notazione stile oggetto.campo, in quanto non è sintatticamente valida, ma usando oggetto['campo'] è perfetto.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2021
    Messaggi
    3
    Array associativi.. Sapevo che la risposta sarebbe stata banale quanto la domanda.. Grazie mille!!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,950
    Quote Originariamente inviata da Niknex Visualizza il messaggio
    Array associativi.. Sapevo che la risposta sarebbe stata banale quanto la domanda.. Grazie mille!!
    In realtà, è meno banale di quanto sembri, perché non molti studiano il linguaggio e l'ambiente di programmazione di JavaScript focalizzandosi sugli "internals", ovvero su come funziona il runtime, ma si concentrano prevalentemente sulla sintassi facendo parallelismi con altri linguaggi che non sempre sono applicabili, e non vanno oltre la superficie.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2021
    Messaggi
    3
    Quote Originariamente inviata da alka Visualizza il messaggio
    In realtà, è meno banale di quanto sembri, perché non molti studiano il linguaggio e l'ambiente di programmazione di JavaScript focalizzandosi sugli "internals", ovvero su come funziona il runtime, ma si concentrano prevalentemente sulla sintassi facendo parallelismi con altri linguaggi che non sempre sono applicabili, e non vanno oltre la superficie.

    Ciao!
    Colgo l'occasione per porti un dubbio che mi è sorto..
    Vista la struttura:
    codice:
    "attr":{"100":"ITXXXEXXXXXXXX","101":"3","103":"220"}
    Come mai usando "data.records[conta].lead.attr[0]" mi restituisce "undefined"? Non dobrebbe essere comunque una soluzione accettabile?

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,950
    Quote Originariamente inviata da Niknex Visualizza il messaggio
    Come mai usando "data.records[conta].lead.attr[0]" mi restituisce "undefined"? Non dobrebbe essere comunque una soluzione accettabile?
    Se confronti la sintassi con quella della risposta precedente, noterai che tra le parentesi quadre il valore della chiave è espresso come stringa:
    codice:
    attr['100']
    Nel tuo caso, scrivendo attr[0], stai accedendo all'elemento con posizione 0 (zero), quindi il primo elemento, all'interno di un ipotetico array; tuttavia, la variabile attr non punta a un array bensì a un oggetto, pertanto non puoi usare quella sintassi con l'indice ma puoi leggerne le proprietà, che si possono esprimere con la sintassi oggetto.prop anche se in questo caso ciò non è possibile perché le chiavi dell'oggetto, pur essendo stringhe, contengono un numero e quindi renderebbero la sintassi non valida, motivo per cui si accede con la modalità indicata all'inizio.

    Riepilogando, accedere a una proprietà tramite chiave è diverso dallo specificare l'indice di un elemento di un array, e in questo caso non siamo in presenza di un array.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Tag per questa discussione

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 © 2021 vBulletin Solutions, Inc. All rights reserved.