Newsgroup: it.comp.appl.access
Titolo: [parzialmente OT] dati sql server con caratteri JSON

mi scuso per il parziale ot ma non trovo nulla nel web.
 
da una App Flutter vado a leggermi i dati da un db sql server.
il risultato della lettura è una stringa json e fin qui tutto ok, faccio 
il parsing e mi popolo quello che mi serve nella App
 
il problema sorge quando nei dati memorizzati in sql server ho caratteri 
non consentiti nei json
tipo ",\ a capo, tab etc
mi va in errore il parsing e devo farmi ogni volta il debug per capire 
quale carattere ha mandato in crisi il tutto
 
esiste una qualche funzione TSQL che mi restituisca il dataset ripulito 
dai caratteri non ammessi?
Attualmente sto predisponendo viste delle tabelle che mi servono con 
vari replace dei caratteri che man mano scopro non essere consentiti ma 
vorrei qualcosa di più efficiente
 
idee?
BFS


Ma chi va a valorizzare quei dati sul db?
Non si puo' impostare una scrittura 'di soli valori json-compatibili' 
sul programma che va a scriverci?


Se non si potesse controllare lo scrivente, allora lato lettore si 
potrebbe filtrare il campo contenente la stringa json malformata prima 
di leggerla dall'app, c'e' la funzione OPENJSON su tsql
---------------------
CREATE FUNCTION dbo.FilterNonJSONCharacters
(
     @jsonString NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
     DECLARE @cleanedString NVARCHAR(MAX) = N'';
 
     -- Utilizza un'espressione regolare per mantenere solo i caratteri 
conformi JSON
     SET @cleanedString = (
         SELECT value
         FROM OPENJSON(@jsonString)
         FOR JSON AUTO
     );
 
     RETURN @cleanedString;
END;
-----------------------
E poi prima di usare un certo campo di nome STRINGA_JSON
 
UPDATE ARTICOLI SET STRINGA_JSON = dbo.FilterNonJSONCharacters(STRINGA_JSON)
WHERE ....
-----------------------
 
Arrivati qua il campo STRINGA_JSON del record attuale dovrebbe essere 
stato ripulito ed usabile
Tutta farina del sacco ChatGpt
 

Il 01/09/2023 18:42, RobertoA ha scritto:

chi scrive lo fa da una applicazione access
quindi scrive qualsiasi carattere anche facendo copia incolla
esempio un nominativo è :
azienda agricola "il giardino"
 
ovvio che l'utente lo carica cosi come lo scrivo io
oppure quando inseriscono articoli possono avere cose tipo
monitor 22" hdmi\vga *mod 2023*  etc etc
 
mi sarebbe impossibile eseguire il replace dei caratteri in ogni textbox 
dell'applicazione
 
BFS
 
 
 
 


fantastico, sembra fare quello che mi serve
lunedi la provo
grazie!
 
BFS


funziona e ho trovato pure di meglio
 
select * from miatabella for json auto
 
mi restituisce direttamente la stringa json purificata
 
BFS
 
 
 


Interessante sto json auto
E quindi alla fine della fiera che fai?
Scrivi sul db e poi purifichi,
oppure ogni volta che devi leggere purifichi e poi leggi?
 
 


lato access/ms sql server non tocco nulla, lascio che inseriscano pure 
tutti i caratteri strampalati dai pc
 
lato flutter mi è bastato correggere l'istruzione sql
 
String path = await getDatabasesPath();
final Database db = await openDatabase(join(path, globals.nomeDB));
sql = "SELECT *  FROM anagrafica for json auto";
await read(sql);
...
...
etc etc
 
 
tablet e smartphone importano così l'anagrafica senza errori e caratteri 
non consentiti
 
 
BFS