It is currently 22 April 2025, 20:57 Advanced search

JSON.stringify di un documento

Domande e risposte su come utilizzare Instant Developer Cloud al meglio

JSON.stringify di un documento

Postby d.termini » 4 June 2020, 14:33

Ho notato che passando un documento a JSON.stringify, questo sembra venire stringificato 2 volte.
Qualcuno può confermare?
Se sì, è voluto o è un bug?

Esempio:
Code: Select all
{
a: "pippo",
b: true,
c: 123
}


Mi aspetto:
Code: Select all
{"a":"pippo","b":true,"c":123}


Ottengo invece:
Code: Select all
\"{\"a\":\"pippo\",\"b\":true,\"c\":123}\"
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41

Re: JSON.stringify di un documento

Postby lucabaldini » 4 June 2020, 14:44

Nella documentazione è scritto che la funzione stringify accetta solo IDMap e IDArray:
https://doc.instantdeveloper.com/?ARTID=90C4BA28-B782-4FA9-8D62-8B7304B06CC2&LANG=it

Probabilmente con oggetti di tipo IDDocument fa altro...
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON.stringify di un documento

Postby lucabaldini » 4 June 2020, 14:49

Stiamo valutando di poter gestire anche il caso di documenti, anche se non è facile... perché l'operazione stringify/parse dovrebbe essere invertibile e restituire il documento... ma il documento ha figli... e collection... e di tipi differenti... e in JSON non è possibile specificare il tipo di oggetti contenuti quindi non si potrebbe sapere, durante la parse, quali oggetti costruire...

User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON.stringify di un documento

Postby lucabaldini » 4 June 2020, 14:51

Comunque, per il momento, la funzione stringify vuole IDMap o IDArray... devi creare un IDMap ed inserire lì dentro le proprietà del documento...

Potresti farti una funzione "generica" che navigando lo schema del documento lo restituisce "sotto forma di IDMap"...
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON.stringify di un documento

Postby d.termini » 4 June 2020, 15:59

Ciao Luca, sì ma sono su InDe Cloud :P
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41

Re: JSON.stringify di un documento

Postby lucabaldini » 5 June 2020, 6:42

AAAAAAAAAAHHHHHHHHHHHHHH

Scusa, non avevo letto il nome del forum!!!! :-DDDDDDD

Comunque dovresti usare il metodo intoJSON e non direttamente la JSON.stringify... anche perché vengono salvate altre proprietà (come inserted, deleted, loaded, hidden, etc...), viene salvato il datatype della classe, gli eventuali errori... non solo le proprietà...

Ovviamente, tramite le options puoi decidere tu cosa salvare....
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON.stringify di un documento

Postby d.termini » 5 June 2020, 7:23

Avevo visto quel metodo, ma ho visto che comunque è implementato il metodo toJSON richiamato in automatico da stringify (avevo provato a farmene uno io e mi veniva rinominato toJSON1 :P) che rimuove già tutto lasciando solo le proprietà, esattamente come serve a me tranne per la doppia stringificazione.
Proverò col metodo diretto intoJSON, mi sembra che di default rimuova tutto quello che non serve.
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41

Re: JSON.stringify di un documento

Postby lucabaldini » 5 June 2020, 7:35

Quello che vedo è questo:

- la classe IDDocument (classe base di tutti i documenti) non ha un metodo toJSON (chiamato automaticamente dalla JSON.stringify nativa)
- la classe IDDocument estende la classe DataRow che, invece, ha il metodo toJSON.
- il metodo DataRow::toJSON è fatto così:
Code: Select all
  return this.intoJSON({asArray: true});

- quindi chiama il metodo intoJSON con asArray uguale a true... dato che non vengono specificati gli altri parametri valgono i loro default.. in particolare, nel codice, vedo che c'è un parametro asString con default value true (che non è documentato)... probabilmente quello andrebbe messo a FALSE... Creo un ticket associato a questo thread... Nel frattempo puoi usare il metodo intoJSON :-)))
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: JSON.stringify di un documento

Postby d.termini » 5 June 2020, 7:39

Perfetto, sto usando il metodo intoJSON e funziona tutto correttamente come mi aspetto :)
Fortunatamente per gestioni tipo questa (dove magari devo poter indicare delle opzioni) mi faccio sempre un metodo così non devo modificare 400 punti ma solo dentro quello e quindi cambiare comportamento è abbastanza indolore
d.termini
 
Posts: 1640
Joined: 13 November 2017, 8:41

Re: JSON.stringify di un documento

Postby lucabaldini » 5 June 2020, 7:40

Ottimo!!! E mi piace l'approccio: anche io faccio così... non ha mai senso, a mio parere, duplicare codice simile e poi dover modificare un sacco di punti per gestioni simili... Ma, ovviamente, questo è un mio parere ;-)

:-))))))))))))
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna


Return to Tips & Tricks - Cloud

Who is online

Users browsing this forum: No registered users and 7 guests

cron