So erstellen Sie ein dynamisches JSON-ObjektAlle,
Ich frage mich, wie man ein dynamisches JSON-Objekt in JSL erstellt?
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( "\[{"username":"bob","address":"12345"}]\" )
);Wenn ich anhand des Beispiels aus dem Scripting-Index den Benutzernamen von Bob zu Say Mark und die Adresse von 12345 bis 12346 ändern wollte und ich 10 solcher Anrufe habe, würde ich es vorziehen, dies als dynamisches Objekt außerhalb zu erstellen. Ich habe mich zunächst auf den Weg gemacht, es als assoziatives Array zu erstellen und dann As JSON Expr() zu verwenden, aber das führt zu einem Fehler. Mein Ansatz war in diesem Fall:
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))
);
Dies geschieht natürlich nicht für dieses Beispiel, sondern für die API, die ich aufrufen möchte. Wenn ich jedoch fest codiertes JSON als Eingabe übergebe, funktioniert der API-Aufruf wie erwartet.

Jede Hilfe ist willkommen.
Betreff: So erstellen Sie ein dynamisches JSON-ObjektDas war für den Aufbau Schritt für Schritt, die vollständige "hardcoded" Version wäre einfach
monatlichFaktoren = { {
[ "Monat" => 1, "Monatsname" => "Jan", "Albedo" => 0,2, "Verschmutzungsverlust" => 2,0],
[ "Monat" => 2, "Monatsname" => "Feb", "Albedo" => 0,2, "Verschmutzungsverlust" => 2,0],
[ "Monat" => 3, "Monatsname" => "März", "Albedo" => 0,2, "Verschmutzungsverlust" => 2,0]
}};
je = As JSON Expr(monthlyFactors);
Show(je);
Als Faustregel gilt:
* JSON-Arrays werden JSL-Listen zugeordnet (keine Matrizen oder Vektoren, achten Sie auf die „[]“-Ähnlichkeit);
* JSON-Wörterbücher werden auf assoziative JSL-Arrays abgebildet;
* Suche nach nicht ausgewerteten Variablenreferenzen;
* Überprüfen Sie, ob Aufrufe zur Änderung der Datenstruktur das Zielobjekt tatsächlich ändern (im Gegensatz zur Rückgabe einer modifizierten Kopie).
Betreff: So erstellen Sie ein dynamisches JSON-ObjektUnd vergessen Sie nicht, dass Sie JSON erstellen können, indem Sie einfach Zeichenfolgen im JSON-Format verketten.
Keine Listen oder assoziativen Arrays erforderlich.
Betreff: So erstellen Sie ein dynamisches JSON-ObjektWenn ich es mit dem Chrome-Add im JSON-Editor so umschreibe, sehe ich eine Liste assoziativer Arrays
[
{
"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
}
]

Betreff: So erstellen Sie ein dynamisches JSON-ObjektDas scheint zu funktionieren.
innereListe = {};
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]);
MonthlyFactors = {innerList};
je = As JSON Expr(EvalList(monthlyFactors));
Show(je);
Ich denke, das eigentliche Problem besteht darin, die richtigen API-Aufrufe für die JSL-Liste und die Datenstrukturen assoziativer Arrays sowie ihr Verhalten in Bezug auf die Auswertung von Variablen, die Rückgabe einer Kopie im Vergleich zu einer Live-Referenz usw. zu kennen. Die Tatsache, dass sie zum Erstellen eines JSON-Objekts verwendet werden, ist zufällig.
Angesichts der neuen Unterstützung für REST-APIs von JMP stimme ich jedoch zu, dass eine Sitzung mit einem detaillierteren End-to-End-Beispiel hilfreich wäre. Ich werde diesen Vorschlag allein an unser Doc-Team weitergeben. Danke für den Vorschlag!
Betreff: So erstellen Sie ein dynamisches JSON-ObjektAh.
Ich hatte einen Übertragungsfehler vom Bild zum Text.
Betreff: So erstellen Sie ein dynamisches JSON-ObjektHast du den Link zur API. Ich glaube nicht, dass Sie gültiges JSON aufgelistet haben.
Zumindest der JSON-Editor in Chrome glaubt das nicht.
DankeBetreff: So erstellen Sie ein dynamisches JSON-Objekt@nascif_jmp Und @bryan_boone ,
Vielen Dank für Ihre Antworten. Ihre Antworten haben mir geholfen, etwas zu erreichen, aber ich habe ein paar Fragen:
1. Können Sie freundlicherweise ein Beispiel für ein akzeptiertes JSON-Array-Format in JSL bereitstellen? Wird das akzeptiert?

2. Deckt der Skriptindex oder der Skriptleitfaden die Teile des JSON-Arrays ab oder wie man ein leeres JSON-Objekt definiert, wie nasicf freundlicherweise gezeigt hat?
A. Wenn ja, würde ich das gerne lesen
B. Wenn nein, würde ich darum bitten, dass dies der Dokumentation hinzugefügt wird, da ich es nirgendwo finden konnte
Betreff: So erstellen Sie ein dynamisches JSON-ObjektDie JavaScript/Python-Syntax für Listen ("[]") bedeutet in JSL nicht dasselbe. In JSL bezeichnet '[]' ein Leerzeichen Matrix, die keine gültige JSON-Darstellung hat, weshalb Sie das '?' Operator im Ergebnis. Das '?' operator wiederum muss die Remote-Fehlermeldung verursachen, die Sie als Antwort von Ihrem Dienst erhalten.
Sie sollten stattdessen '{}' verwenden, um eine leere Liste anzuzeigen, oder '[=>]', um ein leeres assoziatives Array/Wörterbuch anzuzeigen.
Es ist immer eine gute Praxis, Zwischenergebnisse zu erfassen und sie mit show() zu untersuchen, um Ihre Annahmen zu testen.
http://wiki.c2.com/?MakeItWorkMakeItRightMakeItFast
Betreff: So erstellen Sie ein dynamisches JSON-ObjektSie können "dynamisches" JSON erstellen, aber Sie müssten Ihre Unterelemente dem assoziativen Array hinzufügen, nachdem sie erstellt wurden.
So funktioniert JSL.
Das zeigt, was ich meine:
aa = [=>];
list = {};
aa["a jsl list"] = list;
Insert Into(list, "Hello World");
Insert Into(list, 2019);
show(list);
show(aa);
Ausgänge:
list = {"Hello World", 2019};
aa = ["a jsl list" => {}];
Während dies:
aa = [=>];
list = {};
Insert Into(list, "Hello World");
Insert Into(list, 2019);
aa["a jsl list"] = list;
show(list);
show(aa);
Ausgänge:
list = {"Hello World", 2019};
aa = ["a jsl list" => {"Hello World", 2019}];
Betreff: So erstellen Sie ein dynamisches JSON-ObjektIch habe diesen Thread überhaupt nicht verfolgt, aber eine Erwähnung der Verwendung von assoziativen Arrays gesehen und was als Verwirrung über das Standardergebnis erschien. Das ist der einzige Aspekt, auf den ich antworte.
Sehen Hilfe > Bücher > Skriptleitfaden und suchen Sie im Inhaltsverzeichnis nach assoziativen Arrays:
Standardwerte
Ein Standardwert bestimmt den Wert eines Schlüssels, der in einem assoziativen Array nicht vorhanden ist. Wenn du
versuchen, auf einen Schlüssel zuzugreifen, der nicht in einem assoziativen Array vorhanden ist, wird ein Fehler ausgegeben. Wenn Sie a definieren
Standardwert für Ihr assoziatives Array, führt der Zugriff auf einen Schlüssel, der nicht existiert, zu der
Folgendes:
• fügt den Schlüssel zum assoziativen Array hinzu
• Weist dem neuen Schlüssel den Standardwert zu
• gibt anstelle eines Fehlers den (Standard-)Wert des neuen Schlüssels zurück
Wenn Sie ein assoziatives Array aus einer Liste von Zeichenfolgen erstellen, ohne den Schlüsseln Werte zuzuweisen,
dann werden den Schlüsseln Werte von 1 zugewiesen. Der Standardwert für das assoziative Array ist auf 0 gesetzt.
So legen Sie den Standardwert fest:
cary = Associative Array();
cary << Set Default Value( "Cary, NC" );<BR />
Um festzustellen, ob ein Standardwert für ein assoziatives Array festgelegt ist, verwenden Sie die <
Meldung Standardwert.
cary << Get Default Value;
"Cary, NC"
Wenn es keinen Standardwert gibt, wird Empty() zurückgegeben.
Neben der Set Default Value-Meldung kann im Literal-Konstruktor ein Default-Wert gesetzt werden
mit =>Wert ohne Schlüssel.
counts = ["a" => 10,
"b" => 3,
=> 0]; // default value of 0
counts["c"] += 1;
Show( counts );
counts = ["a" => 10, "b" => 3, "c" => 1, => 0];
In der ersten Zeile ist der Standardwert auf 0 gesetzt. In der zweiten Zeile existiert der Schlüssel "c" nicht
zählt. In der Ausgabe wird der Schlüssel „c“ mit dem Standardwert 0 angelegt und dann inkrementiert
um 1.
Hinweis: Wenn der Wert eines Schlüssels der Standardwert ist, wird der Schlüssel gelöscht, da jeder Schlüssel zurückgegeben wird
der Standardwert.
Betreff: So erstellen Sie ein dynamisches JSON-Objekt@Mark_Bailey ,
Wenn ich "[ ]" verwende, führt das zu einem Fehler.
Betreff: So erstellen Sie ein dynamisches JSON-ObjektSie können jedes Ergebnis definieren, das Sie zurückgeben möchten, wenn Sie auf einen Schlüssel verweisen, der keinen Wert in einem Paar in einem assoziativen Array hat.
Betreff: So erstellen Sie ein dynamisches JSON-ObjektKann ich zunächst empfehlen, dass Sie nicht nur ein Bild kopieren, sondern die JSL-Code-Funktionalität verwenden, damit die Leute Ihren Code kopieren und einfügen können?
Ich nehme an, Sie versuchen, dem Benutzernamen einen Vektor zu geben?
Ich lasse es immer noch nicht mit httpbin abstürzen, obwohl es immer noch das seltsame Operator-Ding macht.Wenn ich eine Liste anstelle einer Matrix verwenden würde, scheint es zu tun, was Sie meiner Meinung nach wollen.
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;
Hilft das?
Betreff: So erstellen Sie ein dynamisches JSON-Objekt@vince_faller ,
Das Problem ergibt sich also daraus:

Wenn das assoziative Array einen Schlüssel ohne Wert hat, wird es bei Verwendung von As JSON Expr() in diesen seltsamen Operator (?) übersetzt, der nicht richtig analysiert werden kann, was wiederum einen Fehler auslöst. In meinem Fall habe ich einfach den Schlüssel aus meinem Associative Array gelöscht und es hat funktioniert, aber ich bin neugierig zu wissen, wie man einen solchen Parameter richtig übergibt.
Betreff: So erstellen Sie ein dynamisches JSON-Objekt@vince_faller ,
Da ich einige der Parameter hier nicht teilen kann, habe ich sie Ihnen als private Nachricht gesendet. Sie werden aus der Meldung ersehen, dass das hartcodierte Beispiel und As JSON Expr() die gleichen Parameter haben, die Werte dynamisch sind, aber es führt zu einem Fehler, wie ich zuvor gezeigt habe.
Betreff: So erstellen Sie ein dynamisches JSON-ObjektHaben Sie bestätigt, dass Ihr AS JSON Expr() mit Ihrem fest codierten übereinstimmt?
Das Erstellen des JSON-Objekts scheint zu funktionieren.
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));