Come costruire un oggetto JSON dinamicoTutto,
Mi chiedo come creare un oggetto JSON dinamico in JSL?
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( "\[{"username":"bob","address":"12345"}]\" )
);Usando l'esempio dall'indice di scripting, se volessi variare il nome utente da bob per dire mark e address da 12345 a 12346 e ho 10 chiamate di questo tipo, preferirei costruirlo come oggetto dinamico all'esterno. Inizialmente mi sono avventurato nel percorso di costruirlo come un array associativo e quindi di utilizzare As JSON Expr() , tuttavia, ciò si traduce in un errore. Il mio approccio in quel caso è stato:
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))
);
Naturalmente, questo non sta accadendo per questo esempio, ma l'API che sto cercando di chiamare. Tuttavia, quando passo JSON hardcoded come input, la chiamata API funziona come previsto.

Qualsiasi aiuto è apprezzato.
Ri: Come costruire un oggetto JSON dinamicoQuello era per costruirlo passo dopo passo, la versione completa "hardcoded" sarebbe giusta
fattori mensili = { {
[ "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(fattori mensili);
Mostra(je);
Come regola generale:
* Gli array JSON si mappano agli elenchi JSL (non matrici o vettori, attenzione alla somiglianza '[]');
* I dizionari JSON mappano agli array associativi JSL;
* Verificare la presenza di riferimenti variabili non valutati;
* Controlla se le chiamate di modifica della struttura dei dati cambiano effettivamente l'oggetto di destinazione (invece di restituire una copia modificata).
Ri: Come costruire un oggetto JSON dinamicoE non dimenticare che puoi creare JSON semplicemente concatenando le stringhe nel formato JSON.
Non sono necessari elenchi o array associativi.
Ri: Come costruire un oggetto JSON dinamicoSe lo riscrivo in questo modo utilizzando l'aggiunta di Chrome nell'editor JSON, vedo un elenco di array associativi
[
{
"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
}
]

Ri: Come costruire un oggetto JSON dinamicoQuesto sembra funzionare.
listainner = {};
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]);
monthFactors = {innerList};
je = As JSON Expr(EvalList(monthlyFactors));
Mostra(je);
Penso che il vero problema sia conoscere le giuste chiamate API all'elenco JSL e alle strutture dati degli array associativi e il loro comportamento per quanto riguarda la valutazione delle variabili, la restituzione di una copia rispetto a un riferimento live e così via. Il fatto che vengano utilizzati per creare un oggetto JSON è casuale.
Detto questo, con il nuovo supporto per le API REST di JMP sono d'accordo che sarebbe utile avere una sessione con un esempio end-to-end più dettagliato. Passerò questo suggerimento da solo al nostro team di dottori. Grazie per il suggerimento!
Ri: Come costruire un oggetto JSON dinamicoAh.
Ho avuto un errore di trascrizione passando dall'immagine al testo.
Ri: Come costruire un oggetto JSON dinamicoHai il link all'API. Non credo che tu abbia elencato JSON valido.
Almeno l'editor JSON in Chrome non la pensa così.
GrazieRi: Come costruire un oggetto JSON dinamico@nascif_jmp E @bryan_boone ,
Grazie per le tue risposte. Le tue risposte mi hanno aiutato ad arrivare da qualche parte, tuttavia ho un paio di domande:
1. Puoi gentilmente fornire un esempio di formato di array JSON accettato in JSL? Questo è accettato?

2. L'indice di scripting o la guida di scripting copre le parti dell'array JSON o come definire un oggetto JSON vuoto come nasicf ha gentilmente mostrato?
UN. Se sì, mi piacerebbe leggerlo
B. In caso negativo, chiederei di aggiungerlo alla documentazione, perché non sono riuscito a trovarlo da nessuna parte
Ri: Come costruire un oggetto JSON dinamicoLa sintassi JavaScript/Python per le liste ("[]") non significa la stessa cosa in JSL. In JSL '[]' denota un vuoto matrice, che non ha una rappresentazione JSON valida, motivo per cui stai ricevendo il '?' operatore nel risultato. Quello '?' operatore a sua volta deve essere ciò che sta causando il messaggio di errore remoto che stai ricevendo come risposta dal tuo servizio.
Dovresti usare invece '{}' per indicare una lista vuota, o '[=>]' per indicare un array/dizionario associativo vuoto.
È sempre buona norma acquisire i risultati intermedi ed esaminarli utilizzando show() per testare le ipotesi.
http://wiki.c2.com/?MakeItWorkMakeItRightMakeItFast
Ri: Come costruire un oggetto JSON dinamicoPuoi creare JSON "dinamico" ma dovresti aggiungere i tuoi sottoelementi all'array associativo dopo che sono stati creati.
Questo è solo il modo in cui funziona JSL.
Questo mostra cosa intendo:
aa = [=>];
list = {};
aa["a jsl list"] = list;
Insert Into(list, "Hello World");
Insert Into(list, 2019);
show(list);
show(aa);
uscite:
list = {"Hello World", 2019};
aa = ["a jsl list" => {}];
Mentre questo:
aa = [=>];
list = {};
Insert Into(list, "Hello World");
Insert Into(list, 2019);
aa["a jsl list"] = list;
show(list);
show(aa);
Uscite:
list = {"Hello World", 2019};
aa = ["a jsl list" => {"Hello World", 2019}];
Ri: Come costruire un oggetto JSON dinamicoNon ho seguito affatto questo thread, ma ho visto una menzione dell'uso di array associativi e ciò che è apparso come confusione sul risultato predefinito. Questo è l'unico aspetto al quale rispondo.
Vedere Aiuto > Libri > Guida alla sceneggiatura e cerca gli array associativi nel sommario:
Valori standard
Un valore predefinito determina il valore di una chiave che non esiste in un array associativo. Se tu
prova ad accedere a una chiave che non esiste in un array associativo, si verifica un errore. Se definisci a
valore predefinito per l'array associativo, l'accesso a una chiave che non esiste risulta nel file
seguente:
• aggiunge la chiave all'array associativo
• assegna il valore predefinito alla nuova chiave
• restituisce il valore (predefinito) della nuova chiave invece di un errore
Se costruisci un array associativo da un elenco di stringhe senza assegnare valori alle chiavi,
quindi alle chiavi vengono assegnati i valori di 1. Il valore predefinito per l'array associativo è impostato su 0.
Per impostare il valore predefinito:
cary = Associative Array();
cary << Set Default Value( "Cary, NC" );<BR />
Per determinare se esiste un valore predefinito impostato per un array associativo, utilizzare il metodo <
Messaggio Valore predefinito.
cary << Get Default Value;
"Cary, NC"
Se non esiste un valore predefinito, viene restituito Empty().
Oltre al messaggio Imposta valore predefinito, è possibile impostare un valore predefinito nel costruttore letterale
usando =>valore senza una chiave.
counts = ["a" => 10,
"b" => 3,
=> 0]; // default value of 0
counts["c"] += 1;
Show( counts );
counts = ["a" => 10, "b" => 3, "c" => 1, => 0];
Nella prima riga, il valore predefinito è impostato su 0. Nella seconda riga, la chiave "c" non esiste
conta. Nell'output, la chiave "c" viene creata con il valore predefinito 0 e quindi incrementata
da 1.
Nota: se il valore di una chiave è il valore predefinito, la chiave viene eliminata perché verrà restituita qualsiasi chiave
il valore predefinito.
Ri: Come costruire un oggetto JSON dinamico@Mark_Bailey ,
Quando uso "[ ]" , si verifica un errore.
Ri: Come costruire un oggetto JSON dinamicoÈ possibile definire qualsiasi risultato che si desidera restituire quando si fa riferimento a una chiave che non ha un valore in una coppia in un array associativo.
Ri: Come costruire un oggetto JSON dinamicoPosso innanzitutto consigliarti di non copiare semplicemente un'immagine, ma di utilizzare la funzionalità del codice JSL in modo che le persone possano copiare e incollare il tuo codice?
Presumo che tu stia cercando di dare un vettore al nome utente?
Non sto ancora andando in crash con httpbin, anche se sta ancora facendo la strana cosa dell'operatore.Se ho usato un elenco invece di una matrice, sembra che faccia quello che penso tu voglia.
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;
Questo aiuta?
Ri: Come costruire un oggetto JSON dinamico@vince_faller ,
Quindi il problema nasce da questo:

Se l'array associativo ha una chiave senza valore, allora usando As JSON Expr(), viene tradotto in questo strano operatore (?) che non è qualcosa che può essere analizzato correttamente che a sua volta genera un errore. Nel mio caso, ho appena eliminato la chiave dal mio array associativo e ha funzionato, tuttavia sono curioso di sapere qual è il modo giusto per passare tale parametro?
Ri: Come costruire un oggetto JSON dinamico@vince_faller ,
Poiché alcuni dei parametri non sono qualcosa che posso condividere qui, te li ho inviati come messaggio privato. Vedrai dal messaggio che l'esempio hardcoded e As JSON Expr() hanno gli stessi parametri , i valori sono dinamici, ma si traduce in un errore come ho mostrato in precedenza.
Ri: Come costruire un oggetto JSON dinamicoHai confermato che il tuo AS JSON Expr () è lo stesso del tuo hardcoded?
La creazione dell'oggetto JSON sembra funzionare.
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));