Avatar billede Mik2000 Professor
08. december 2021 - 21:39 Der er 7 kommentarer

Backslashes JSON_SET problem

Hej
Jeg prøver at lave dette

UPDATE minTabel SET mitFelt = JSON_SET(mitFelt, '$.navn', '{"test":123,"asd":"ad"}') WHERE id=5

Det resulterer i dette i databasen
{"myObject": "{\"test\":123,\"asd\":\"ad\"}"}

Hvordan undgår man \ kommer med i databasen?
Avatar billede arne_v Ekspert
08. december 2021 - 21:50 #1
Utestet efter hurtigt kik i manual:

UPDATE minTabel SET mitFelt = JSON_SET(mitFelt, '$.test', 123, '$.asd', 'ad') WHERE id=5
Avatar billede jakobdo Ekspert
08. december 2021 - 22:04 #2
https://database.guide/json_set-insert-or-update-values-in-a-json-document-in-mysql/

Hvad har du af data inden din update?
Hvad forventer du efter din update?
Avatar billede Mik2000 Professor
09. december 2021 - 16:28 #3
Tak for jeres svar

Arne: Vil måske virke
Men havde nok forsimplet det lidt for meget for gør sådan

$array = ['test'=>123, 'asd'=>'ad'];
$json = json_encode($array); // har også prøvet med forskellige qoute flags men gør ikke forskel

// Den giver fint resultat uden backslashes hvis man udskriver, men med " (doubleqoutes)

UPDATE minTabel SET mitFelt = JSON_SET(mitFelt, '$.navn', $json) WHERE id=5

Det resulterer i dette i databasen
{"myObject": "{\"test\":123,\"asd\":\"ad\"}"}

Hvordan undgår man \ kommer med i databasen?
Avatar billede Mik2000 Professor
09. december 2021 - 16:43 #4
Man kan måske gøre noget i stil med
$array = ['test'=>123, 'asd'=>'ad'];
$json = str_replace("\"", "'", json_encode($array)); // replace " med '

Men måske ikke den kønneste løsning og ved ikke om man risikere der går noget galt.
Men kan ikke lige finde noget der skulle kunne få json_encode til at lave ' i stedet for "

Hvad tænker I?
Andre løsninger?

På forhånd tak :)
Avatar billede arne_v Ekspert
09. december 2021 - 16:52 #5
Jeg tror at du griber det lidt forkert an.

Som jeg forstår JSON_SET så fungere den som:

nyværdi = JSON_SET(gammelværdi, feltnavn1, nyværdi1, feltnavn2, nyværdi2, feltværdi, nyværdi3);

D.v.s. at du ikke tænke array.
Avatar billede jakobdo Ekspert
09. december 2021 - 17:05 #6
Hvad er årsagen til du ikke vil have \ i din db?
Hvis det er sådan json funktionerne gemmer data i mysql.
Har du også disse \ når du trækker data ud igen med de tilhørende json funktioner?
Avatar billede Mik2000 Professor
10. december 2021 - 11:50 #7
Arne: Tanken er at værdien her er et json object

jakobdo: Så længe jeg f.eks. henter ud med JSON extract er det ikke et problem. Men grunden til jeg gerne vil have det er, at somme tider hentes feltet ud sammen med flere andre i en klasse som ikke tillader vi lige kan smide json extract på. Dvs. den kommer ud som tekst og så kan vi arbejde med det i PHP som et json object.
Her er det nemmer når der ikke er backslashes og samtidige så virker json extract også når der ikke er backslashes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester