Comment créer un objet JSON dynamiqueTous,
Je me demande comment construire un objet JSON dynamique en JSL ?
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( "\[{"username":"bob","address":"12345"}]\" )
);En utilisant l'exemple de l'index de script, si je voulais faire varier le nom d'utilisateur de bob pour dire la marque et l'adresse de 12345 à 12346 et que j'ai 10 appels de ce type, je préférerais le construire en tant qu'objet dynamique à l'extérieur. Je me suis d'abord aventuré sur la voie de le construire en tant que tableau associatif, puis d'utiliser As JSON Expr() , cependant, cela entraîne une erreur. Mon approche dans ce cas était:
MyAA = Associative Array();
MyAA["username"] = "bob" ;
MyAA["address"] = "12345" ;<BR /><BR />request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( As Json Expr(MyAA))
);
Bien sûr, cela ne se produit pas pour cet exemple, mais pour l'API que j'essaie d'appeler. Cependant, lorsque je passe JSON codé en dur comme entrée, l'appel api fonctionne comme prévu.

Toute aide est appréciée.
Re : Comment créer un objet JSON dynamiqueC'était pour le construire étape par étape, la version complète "codée en dur" serait juste
facteurs mensuels = { {
[ "month" => 1, "month_name" => "Jan", "albedo" => 0.2, "soiling_loss" => 2.0],
[ "month" => 2, "month_name" => "Feb", "albedo" => 0.2, "soiling_loss" => 2.0],
[ "month" => 3, "month_name" => "Mar", "albedo" => 0.2, "soiling_loss" => 2.0]
}} ;
je = As JSON Expr(monthlyFactors);
Afficher(je);
En règle générale :
* Les tableaux JSON sont mappés sur des listes JSL (et non des matrices ou des vecteurs, méfiez-vous de la similarité '[]') ;
* Les dictionnaires JSON correspondent aux tableaux associatifs JSL ;
* Vérifiez les références de variables non évaluées ;
* Vérifiez si les appels de modification de la structure de données modifient réellement l'objet cible (au lieu de renvoyer une copie modifiée).
Re : Comment créer un objet JSON dynamiqueEt n'oubliez pas que vous pouvez créer JSON en concaténant simplement des chaînes au format JSON.
Aucune liste ou tableau associatif n'est nécessaire.
Re : Comment créer un objet JSON dynamiqueSi je le réécris comme ceci en utilisant l'ajout de chrome dans l'éditeur JSON, je vois une liste de tableaux associatifs
[
{
"month": 1,
"month_name": "Jan",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 2,
"month_name": "Feb",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 3,
"month_name": "Mar",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 4,
"month_name": "Apr",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 5,
"month_name": "May",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 6,
"month_name": "Jun",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 7,
"month_name": "Jul",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 8,
"month_name": "Aug",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 9,
"month_name": "Sep",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 10,
"month_name": "Oct",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 11,
"month_name": "Nov",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 12,
"month_name": "Dec",
"albedo": 0.2,
"soiling_loss": 2
}
]

Re : Comment créer un objet JSON dynamiqueCela semble fonctionner.
listeintérieure = {} ;
InsertInto(innerList, [ "month" => 1, "month_name" => "Jan", "albedo" => 0.2, "soiling_loss" => 2.0]);
InsertInto(innerList, [ "month" => 2, "month_name" => "Feb", "albedo" => 0.2, "soiling_loss" => 2.0]);
InsertInto(innerList, [ "month" => 3, "month_name" => "Mar", "albedo" => 0.2, "soiling_loss" => 2.0]);
facteurs mensuels = {innerList} ;
je = As JSON Expr(EvalList(monthlyFactors));
Afficher(je);
Je pense que le vrai problème est de connaître les bons appels d'API à la liste JSL et aux structures de données des tableaux associatifs, et leur comportement en ce qui concerne l'évaluation des variables, le retour d'une copie par rapport à une référence en direct, etc. Le fait qu'ils soient utilisés pour construire un objet JSON est accessoire.
Cela dit, avec la nouvelle prise en charge des API REST de JMP, je suis d'accord qu'il serait utile d'avoir une session avec un exemple de bout en bout plus détaillé. Je transmettrai cette suggestion seule à notre équipe de doc. Merci pour la suggestion!
Re : Comment créer un objet JSON dynamiqueAh.
J'ai eu une erreur de transcription en passant de l'image au texte.
Re : Comment créer un objet JSON dynamiqueAvez-vous le lien vers l'API. Je ne pense pas que vous ayez répertorié JSON valide.
Au moins, l'éditeur JSON de Chrome ne le pense pas.
MerciRe : Comment créer un objet JSON dynamique@nascif_jmp et @bryan_boone ,
Merci pour vos réponses. Vos réponses m'ont aidé à avancer, mais j'ai quelques questions :
1. Pouvez-vous fournir un exemple de format de tableau JSON accepté dans JSL ? Est-ce accepté ?

2. L'index de script ou le guide de script couvre-t-il les parties du tableau JSON ou comment définir un objet JSON vide comme nasicf l'a gentiment montré ?
un. Si oui, j'aimerais le lire
b. Si non, je demanderais que cela soit ajouté à la documentation, car je ne le trouvais nulle part
Re : Comment créer un objet JSON dynamiqueLa syntaxe JavaScript/Python pour les listes ("[]") ne signifie pas la même chose en JSL. Dans JSL '[]' indique un vide matrice, qui n'a pas de représentation JSON valide, c'est pourquoi vous obtenez le '?' opérateur dans le résultat. Ce '?' L'opérateur doit à son tour être la cause du message d'erreur distant que vous obtenez en réponse de votre service.
Vous devez utiliser à la place '{}' pour indiquer une liste vide, ou '[=>]' pour indiquer un tableau/dictionnaire associatif vide.
Il est toujours recommandé de capturer les résultats intermédiaires et de les examiner à l'aide de show() pour tester vos hypothèses.
http://wiki.c2.com/?MakeItWorkMakeItRightMakeItFast
Re : Comment créer un objet JSON dynamiqueVous pouvez créer du JSON "dynamique" mais vous devrez ajouter vos sous-éléments au tableau associatif après leur création.
C'est ainsi que fonctionne JSL.
Cela montre ce que je veux dire :
aa = [=>];
list = {};
aa["a jsl list"] = list;
Insert Into(list, "Hello World");
Insert Into(list, 2019);
show(list);
show(aa);
les sorties:
list = {"Hello World", 2019};
aa = ["a jsl list" => {}];
Alors que ce:
aa = [=>];
list = {};
Insert Into(list, "Hello World");
Insert Into(list, 2019);
aa["a jsl list"] = list;
show(list);
show(aa);
Les sorties:
list = {"Hello World", 2019};
aa = ["a jsl list" => {"Hello World", 2019}];
Re : Comment créer un objet JSON dynamiqueJe n'ai pas du tout suivi ce fil, mais j'ai vu une mention de l'utilisation de tableaux associatifs et de ce qui semblait être une confusion au sujet du résultat par défaut. C'est le seul aspect auquel je réponds.
Voir Aider > Livres > Guide de script et recherchez des tableaux associatifs dans la table des matières :
Les valeurs par défaut
Une valeur par défaut détermine la valeur d'une clé qui n'existe pas dans un tableau associatif. Si tu
essayez d'accéder à une clé qui n'existe pas dans un tableau associatif, une erreur se produit. Si vous définissez un
valeur par défaut pour votre tableau associatif, l'accès à une clé qui n'existe pas entraîne la
suivant:
• ajoute la clé au tableau associatif
• attribue la valeur par défaut à la nouvelle clé
• renvoie la valeur de la nouvelle clé (par défaut) au lieu d'une erreur
Si vous construisez un tableau associatif à partir d'une liste de chaînes sans affecter de valeurs aux clés,
alors les touches reçoivent des valeurs de 1. La valeur par défaut du tableau associatif est définie sur 0.
Pour définir la valeur par défaut :
cary = Associative Array();
cary << Set Default Value( "Cary, NC" );<BR />
Pour déterminer s'il existe une valeur par défaut définie pour un tableau associatif, utilisez la commande <
Message de valeur par défaut.
cary << Get Default Value;
"Cary, NC"
S'il n'y a pas de valeur par défaut, Empty() est retourné.
Outre le message Set Default Value, une valeur par défaut peut être définie dans le constructeur littéral
en utilisant => valeur sans clé.
counts = ["a" => 10,
"b" => 3,
=> 0]; // default value of 0
counts["c"] += 1;
Show( counts );
counts = ["a" => 10, "b" => 3, "c" => 1, => 0];
Dans la première ligne, la valeur par défaut est définie sur 0. Dans la deuxième ligne, la clé "c" n'existe pas dans
compte. Dans la sortie, la clé "c" est créée avec la valeur par défaut de 0 puis incrémentée
par 1.
Remarque : Si la valeur d'une clé est la valeur par défaut, la clé est supprimée car toute clé renverra
la valeur par défaut.
Re : Comment créer un objet JSON dynamique@Mark_Bailey ,
Lorsque j'utilise "[ ]" , cela entraîne une erreur.
Re : Comment créer un objet JSON dynamiqueVous pouvez définir n'importe quel résultat que vous souhaitez renvoyer lorsque vous faites référence à une clé qui n'a pas de valeur dans une paire dans un tableau associatif.
Re : Comment créer un objet JSON dynamiquePuis-je tout d'abord vous recommander de ne pas simplement copier une image, mais d'utiliser la fonctionnalité de code JSL pour que les gens puissent copier et coller votre code ?
Je suppose que vous essayez de donner un vecteur au nom d'utilisateur ?
Je ne le fais toujours pas planter avec httpbin, bien qu'il fasse toujours le truc bizarre de l'opérateur.Si j'ai utilisé une liste au lieu d'une matrice, cela semble faire ce que je pense que vous voulez.
Names default to here(1);
MyAA = Associative Array();
MyAA["username"] = {1, 2, 3};
MyAA["address"] = "12345";
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( AsJSONExpr(myAA) )
);
data = request << Send;
Est ce que ça aide?
Re : Comment créer un objet JSON dynamique@vince_faller ,
Donc le problème vient de ça :

Si le tableau associatif a une clé sans valeur, alors lors de l'utilisation de As JSON Expr(), il est traduit en cet opérateur étrange (?) qui n'est pas quelque chose qui peut être analysé correctement, ce qui génère une erreur. Dans mon cas, je viens de déposer la clé de mon tableau associatif et cela a fonctionné, cependant je suis curieux de savoir quelle est la bonne façon de passer un tel paramètre ?
Re : Comment créer un objet JSON dynamique@vince_faller ,
Comme certains paramètres ne sont pas quelque chose que je peux partager ici, je vous l'ai envoyé en message privé. Vous verrez dans le message que l'exemple codé en dur et As JSON Expr() ont les mêmes paramètres , les valeurs sont dynamiques, mais cela entraîne une erreur comme je l'ai montré plus tôt.
Re : Comment créer un objet JSON dynamiqueAvez-vous confirmé que votre AS JSON Expr() est le même que votre code en dur ?
La construction de l'objet JSON semble fonctionner.
Names default to here(1);
MyAA = Associative Array();
MyAA["username"] = "bob" ;
MyAA["address"] = "12345" ;
myAA["aa"] = associative array();
myAA["aa"]["thing1"] = 14;
myAA["aa"]["thing2"] = 28;
show( As JSON Expr(myAA));