Analyse JSON de sécuritéJ'ai une colonne de chaîne contenant des charges utiles JSON. C'est ainsi que notre partenaire stocke les messages des machines automatisées. Le problème est que leur base de données reçoit parfois des messages non JSON, donc mon :charge utile La colonne contient des lignes qui ne peuvent pas être analysées simplement en JSON.
J'ai enveloppé ma fonction d'analyse avec un bloc Try, mais même dans ce cas, je reçois une alerte pour chaque ligne contenant une chaîne non conforme à JSON. Il fait même parfois planter complètement JMP14. Je pourrais ignorer les erreurs, mais ce n'est pas une excellente façon d'écrire du code robuste.
Local(
{ parsed = [=> ""] },
Try( parsed = Parse JSON( :payload ) );
parsed;
);Cela échoue tellement. Dans les rangées où :charge utile est vide au lieu d'avoir une chaîne JSON, il renvoie un "." pour certaines raisons. Je n'ai aucune idée d'où vient le point.
Existe-t-il un moyen d'utiliser les fonctions d'analyse JSON de manière sécurisée ? Toute aide est appréciée.
Note:
Voici quelques exemples des types de JSON avec lesquels je travaille et ils sont analysés correctement :
{"assetId": "AthènesPaintLineMotor4",
"dataItemId": "Température1",
"dateHeure": "2018-02-22T19:44:41",
"valeur": "91,51"}
{"assetId": OKUMA-Genos-2, "dateTime": "2018-04-30T11:59:13", "dataItemId": "Lp1block", "dataItemName": "p1block", "value": INDISPONIBLE"}
@{"assetId": OKUMA-Genos-2, "dateTime": "2018-04-30T11:59:13", "dataItemId": "Lp1MacManPanelHistory", "dataItemName": "p1MacManPanelHistory", "value": 30/04/2018 07:58:12 @Changer la fenêtre :[26026]"}
Re : Analyse JSON de sécurité intégréeEssayez la solution Batch Interactive @vince_faller discuté ici . (Et @Eric_Hill répondre.)
Scriptscriptscriptscript;
Batch Interactive(1);
DatabaseCall;
Batch Interactive(0);
MoreScriptScriptScript
Re : Analyse JSON de sécurité intégréeJe suis heureux d'apprendre que cela sera modifié dans la version 14.1. Avec ces changements, je reçois toujours les "popups d'alerte" sans fin. Étant donné que la table de données comporte des millions ou des lignes, cliquer sur OK fait parfois planter JMP14. Il n'y a rien de spécial dans les données. En fait, j'ai sous-ensemble une petite partie dans une table différente et, même si les mêmes alertes se produisent, JMP survit au problème. 
Quoi qu'il en soit, je vais trouver une solution simple pour cela. Le JSON non standard se présente sous quelques formes prévisibles. Si je peux, dans ces conditions, cela fonctionnera bien.
Merci pour l'aide!
Re : Analyse JSON de sécurité intégréeUne partie de ce problème est corrigée dans la prochaine maintenance 14.1. Si vous disposez de données qui font planter JMP et que vous pouvez les partager, cela pourrait aider. Voici une solution pour l'instant :
payload = "\[
{
]\"; // malformed JSON
Try(
txt = Log Capture( result = Parse JSON( payload ) );
If( Length( txt ),
Throw( txt ) // error message
);
result; // parsed JSON
,
Show( exception_msg );
"?" // returned value for malformed JSON
);
Cela fonctionne en utilisant le Capture de journal fonction pour capturer toute sortie de journal du Analyser JSON fonction et en jetant cela comme une erreur. Le Montrer (...) est facultatif ; exception_msg est une variable spéciale avec la valeur qui a été renvoyée, soit par lancer (txt) ou par JMP pour une autre erreur.
Le "?" pourrait être remplacé par [ => ] ou une autre valeur qui vous semble logique.
Dans la chaîne de charge utile, j'ai utilisé les guillemets de chaîne brute "\[ et ]\" afin de ne pas avoir besoin d'échapper aux guillemets dans mes données de test. Vous n'en avez pas besoin pour les données déjà présentes dans une table de données.