PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2025 → json chaine rtf
json chaine rtf
Started by Laurent HERMANN, Feb., 12 2026 9:58 AM - 7 replies
Registered member
372 messages
Posted on February, 12 2026 - 9:58 AM
bonjour,

je reçois d'un champs rtf la variable icfr que je mets en forme json :

sJSON est une chaîne = [
{
"q":96,
"i":"%1",
"icfr":"%2"
}
]


sJSON = ChaîneConstruit(sJSON, gnIDProjet, sICFR)
sJSON = Remplace(sJSON,RC,"")
Trace(sJSON)
soit vJson = JSONVersVariant(sJSON)


{"q":96,"i":"10622","icfr":"{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}{\*\generator Riched20 10.0.26100}\viewkind4\uc1 \pard\f0\fs23 lolo\par}"}

pour ensuite faire un appel à une API

le variant ne veut pas se faire
je n'arrive pas à échapper les accolades...

une diée

merci

--
LH
Registered member
314 messages
Posted on February, 12 2026 - 10:53 AM
Bonjour,
Essayes de passer directement par un type JSON

jJSON est un JSON
jJSON.q = 96
jJSON.i = gnIDProjet
jJSON.icfr = sICFR // ou "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}{\*\generator Riched20 10.0.26100}\viewkind4\uc1 \pard\f0\fs23 lolo\par}"
Trace(jJSON)
soit vJson = JSONVersVariant(jJSON)
Message modified, February, 12 2026 - 11:04 AM
Registered member
1,173 messages
Posted on February, 12 2026 - 2:11 PM
Bonjour Laurent,

Cela ne peux pas pas fonctionner car en JSON les \ ouvrent une séquence d'échappement. Du coup \ansi et vu comme \a qui ne correspond à rien.

Il ne faut pas échapper les accolades.

Une solution serait de doubler les \.

Conseille : oublie le "soit vJson...."
Contrôle le type d'emblée : vJson est un Variant...


Voici un code qui fonction (version 2026)
sJSON est une chaîne = [
{
"q":96,
"i":"%1",
"icfr":"%2"
}
]

sICFR est une chaîne=`
{\rtf1\ANSI\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}{\*\generator Riched20 10.0.26100}\viewkind4\uc1 \pard\f0\fs23 lolo\par}
`
sICFR = Remplace(sICFR,"\","\\")
sJSON = ChaîneConstruit(sJSON, 2, sICFR)

// Test avant parse (si dispo dans ta version)
SI JSONValide(sJSON) ALORS
vJson est un Variant = JSONVersVariant(sJSON)
SINON
Erreur("JSON invalide")
FIN



PS : Jeudi prochain je fais une masterclass sur le format JSON

--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV :
https://www.cours-windev-thierrytillier.com/
Tuto WINDEV sur ma chaîne YouTube
Registered member
1,173 messages
Posted on February, 12 2026 - 2:13 PM
Et attention aux guillemets en trop.

--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV :
https://www.cours-windev-thierrytillier.com/
Tuto WINDEV sur ma chaîne YouTube
Registered member
314 messages
Posted on February, 12 2026 - 2:23 PM
THIERRY TILLIER a écrit :
Bonjour Laurent,

Cela ne peux pas pas fonctionner car en JSON les \ ouvrent une séquence d'échappement. Du coup \ansi et vu comme \a qui ne correspond à rien.

Il ne faut pas échapper les accolades.

Une solution serait de doubler les \.

Conseille : oublie le "soit vJson...."
Contrôle le type d'emblée : vJson est un Variant...


Voici un code qui fonction (version 2026)
sJSON est une chaîne = [
{
"q":96,
"i":"%1",
"icfr":"%2"
}
]

sICFR est une chaîne=`
{\rtf1\ANSI\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}{\*\generator Riched20 10.0.26100}\viewkind4\uc1 \pard\f0\fs23 lolo\par}
`
sICFR = Remplace(sICFR,"\","\\")
sJSON = ChaîneConstruit(sJSON, 2, sICFR)

// Test avant parse (si dispo dans ta version)
SI JSONValide(sJSON) ALORS
vJson est un Variant = JSONVersVariant(sJSON)
SINON
Erreur("JSON invalide")
FIN



PS : Jeudi prochain je fais une masterclass sur le format JSON

--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV :
https://www.cours-windev-thierrytillier.com/
Tuto WINDEV sur ma chaîne YouTube


Désolé de te contredire Thierry mais ça fonctionne parfaitement avec un type JSON en WD2025 :
Il est inutile de doubler les \ avec Remplace (le type JSON le gère automatiquement)

J'ai testé avec un champs RTF (comme l'a indiqué Laurent) :
SAI_RTF1 = "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}{\*\generator Riched20 10.0.26100}\viewkind4\uc1 \pard\f0\fs23 lolo\par}"

jJSON est un JSON
jJSON.q = 96
jJSON.i = 10622
jJSON.icfr = SAI_RTF1


Trace("JSON = "+jJSON.VersChaîne())

Trace("")
Trace("jJSON.icfr = "+jJSON.icfr)

soit vJson = JSONVersVariant(jJSON)
Trace("")
Trace("vJson.icfr = "+vJson.icfr)



Et voici ce que l'on obtient, le résultat est correct :

JSON = { "q":96, "i":10622, "icfr":"{\\rtf1\\ansi\\ansicpg1252\\deff0\\nouicompat\\deflang1036{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Calibri;}}\r\n{\\*\\generator Riched20 10.0.26100}\\viewkind4\\uc1 \r\n\\pard\\f0\\fs23 lolo\\par\r\n}\r\n" }

jJSON.icfr = {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.26100}\viewkind4\uc1
\pard\f0\fs23 lolo\par
}


vJson.icfr = {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.26100}\viewkind4\uc1
\pard\f0\fs23 lolo\par
}

Cdlt
Message modified, February, 12 2026 - 2:30 PM
Registered member
1,173 messages
Posted on February, 12 2026 - 4:18 PM
Fabrice

Si tu regarde bien ton code la commande ; jJSON.VersChaîne() réalise le double échappement \\.
Et comme Laurent veut utiliser ce JSON pour un API tu devras faire :
MonhttpRequete est un httpRequete
....
MonhttpRequete .Contenu= jJSON.VersChaîne()

à vérifier avec une API.


C'est plus simple, en effet avec un type JSON.
Je suis resté sur le code d'origine.

--
Thierry TILLIER
Développeur WINDEV -WEBDEV
Formation WINDEV :
https://www.cours-windev-thierrytillier.com/
Tuto WINDEV sur ma chaîne YouTube
Message modified, February, 12 2026 - 4:41 PM
Registered member
314 messages
Posted on February, 12 2026 - 5:15 PM
Thierry,

Laurent souhaitait juste que la fonction JSONVersVariant() puisse s'exécuter "sans provoquer une exception" car je présume qu'il a besoin d'utiliser un variant dans l'API.

le variant ne veut pas se faire
je n'arrive pas à échapper les accolades...


C'est la raison pour laquelle j'ai proposé le type JSON (et non une chaine) pour la fonction JSONVersVariant()

A lui de choisir la méthode qui lui conviendra le mieux.

Bon dév..
Registered member
372 messages
Posted on February, 13 2026 - 11:04 AM
bonjour à tous et merci de vous être préoccupé de mon sort :)

j'ai appliqué la façon du jsonversvariant sans que ça fcte

alors j'ai pris l'artillerie avec un encodebase64 coté client et decode coté api
et au miracle

amazing !!

--
LH