In diesem Abschnitt wird der EGL-Datensatz beschrieben, der einer JavaScript Object Notation-Zeichenfolge (JSON) entspricht. Weitere Abschnitte beschreiben die Funktionen serviceLib.convertFromJSON() und serviceLib.convertToJSON(), die von Rich UI-Entwicklern verwendet werden, um JSON-Daten in eine Variable oder aus einer Variablen zu konvertieren, was unter Umständen erforderlich ist, um auf einen REST-Service anderer Anbieter zugreifen zu können. Bei Fehlschlagen einer dieser Funktionen wird eine Laufzeitausnahmebedingung (RuntimeException) ausgelöst.
{ "EmpNo":10,"LastName":"Smith" }
Record MyRecordPart
EmpNo INT;
LastName STRING;
end
Sie können jeden Basiselementtyp mit Ausnahme von BLOB und CLOB verwenden. Ein EGL-Datensatzfeld ist auch gültig, wenn es auf einem Datenelementabschnitt (DataItem) basiert, der wiederum auf einem der unterstützten Basiselementtypen basiert.
{ "Emp-No":10,"LastName":"Smith" }
Record MyRecordPart
EmpNo INT; {JSONName = "Emp-No"}
LastName STRING;
end
(Sie können den Wert von 'JSONName' nicht überschreiben, wenn Sie einen Datensatz deklarieren, der auf dem Datensatzabschnitt basiert.)
{"Result":{"aTimestamp":1191871152}}
Als allgemeine Regel gilt, dass jede in Klammern eingeschlossene Klausel in einer JSON-Zeichenfolge der Inhalt eines JSON-Laufzeitobjekts ist, das zu einem EGL-Datensatz äquivalent ist.
Record MyTopPart
Result MyTimestampPart;
end
Record MyTimestampPart
aTimestamp BIGINT;
end
Wie gezeigt muss für jede JSON-Kennung (die vor einem Doppelpunkt steht) ein Feld in einem Datensatz vorhanden sein. Wenn ein JSON-Feldname ein für EGL reserviertes Wort ist (beispielsweise "TimeStamp"), müssen Sie auf 'serviceLib.convertFromJSON()' oder 'serviceLib.convertToJSON()' zugreifen, indem Sie ein Wörterverzeichnis Dictionary) anstelle eines Datensatzes verwenden. Diese Variante wird weiter unten in diesem Thema gezeigt.
{"Menu":
{ "id": "file", "value": "File", "popup":
{"Menuitem":
[
{"value": "New", "onClick": "CreateNewDoc()"},
{"value": "Open", "onClick": "OpenDoc()"},
{"value": "Close", "onClick": "CloseDoc()"}
]
}
}
}
(Als das vorliegende Thema geschrieben wurde, befand sich das betreffende Beispiel zusammen mit anderen unter http://json.org/example.html.)
Record MyTopPart
Menu MyMenuPart;
end
Record MyMenuPart
id STRING;
value STRING;
popup MyPopupPart;
end
Record MyPopupPart
MenuItem MyElementPart[];
end
Record MyElementPart
value STRING;
onClick STRING;
end
Um mehr darüber zu erfahren, wie ein Datensatz beim Zugriff auf eine JSON-Zeichenfolge verwendet wird, lesen Sie die Informationen im Rich UI-Beispiel 'geocode.records'.
myRef Dictionary
{
ID = 5,
lastName = "Twain",
firstName = "Mark"
};
Eine Beschreibung der Interaktion mit dem Wörterverzeichnis finden Sie unter 'Wörterverzeichnisabschnitt' und in den einschlägigen Themen im EGL-Hilfesystem.
{"Result":{"aTimestamp":1191871152}}
myTime Dictionary;
Als allgemeine Regel gilt, dass jede in Klammern eingeschlossene Klausel in einer JSON-Zeichenfolge zu einem EGL-Wörterverzeichnis äquivalent ist. Im Zusammenhang mit der JSON-Beispielzeichenfolge behandelt die Funktion 'serviceLib.convertFromJSON()' das Symbol links vom ersten Doppelpunkt (:) als Schlüssel eines Wörterverzeichniseintrags. Der Schlüssel heißt 'Result' (Ergebnis) und ist von der Groß-/Kleinschreibung abhängig. Hierbei (wie in allen Fällen) ist der Inhalt rechts von einem Doppelpunkt der Wert, der dem Schlüssel zugeordnet ist, dessen Name sich links vom betreffenden Doppelpunkt befindet.
myTime Dictionary
{
Result = new Dictionary{ aTimestamp = 1191871152 }
};
numberOfSeconds BIGINT = myTime.Result.aTimestamp;
{"Result":{"Timestamp":1191871152}}
numberOfSeconds BIGINT = myTime.Result["Timestamp"];
{"Menu":
{ "id": "file", "value": "File", "popup":
{"Menuitem":
[
{"value": "New", "onClick": "CreateNewDoc()"},
{"value": "Open", "onClick": "OpenDoc()"},
{"value": "Close", "onClick": "CloseDoc()"}
]
}
}
}
In diesem Beispiel, hat das Wörterverzeichnis einen einzelnen Eintrag, dessen Schlüssel den Namen 'Menu' besitzt. Der Wert, der diesem Schlüssel zugeordnet ist, ist ein anonymes Wörterverzeichnis, was aus den Klammern hervorgeht, die die Zeichenfolge "id" und alle folgenden Zeichenfolgen einbetten. Dieses anonyme Wörterverzeichnis enthält die Schlüssel id, value und popup mit den zugehörigen Werten. Möglicherweise tritt bei Ihnen niemals die Komplexität auf, die der Schlüssel namens popup bedeutet, aber das Problem ist lösbar. Die Beziehungen werden aus der JSON-Beispielzeichenfolge ersichtlich.
Folgende Fragestellung sollte berücksichtigt werden: Welche Anweisung ist erforderlich, um auf die Zeichenfolge "OpenDoc()" zuzugreifen, unter der Annahme, dass die Funktion 'serviceLib.convertFromJSON()' die vorherige JSON-Zeichenfolge in ein Verzeichnis namens 'myMenu' kopiert hat?
myString STRING = myMenu.Menu.popup.MenuItem[2].onClick;
myMenu Dictionary
{ Menu = new Dictionary
{ id = "file",
value = "File",
popup = new Dictionary
{ MenuItem = new Dictionary[]
{ new dictionary {value = "New", onClick = "CreateNewDoc()" },
new dictionary {value = "Open", onClick = "OpenDoc()" },
new dictionary {value = "Close", onClick = "CloseDoc()"}
}
}
}
};
Um mehr darüber zu erfahren, wie ein Wörterverzeichnisdatensatz beim Zugriff auf eine JSON-Zeichenfolge verwendet wird, lesen Sie die Informationen im Rich UI-Beispiel 'geocode.dictionaries'.
{"Result":{"Timestamp":1191871152}}
Record ResultRecordPart
Result Dictionary;
end
myResult ResultRecordPart;
milliseconds BIGINT;
serviceLib.convertFromJSON(resp.body, myResult);
milliseconds = myResult.Result["Timestamp"] as BIGINT;
{"Menu":
{ "id": "file", "value": "File", "popup":
{"Menuitem":
[
{"value": "New", "onClick": "CreateNewDoc()"},
{"value": "Open", "onClick": "OpenDoc()"},
{"value": "Close", "onClick": "CloseDoc()"}
]
}
}
}
Record MyTopPart
Menu MyMenuPart;
end
Record MyMenuPart
id STRING;
value STRING;
popup Dictionary;
end
popup Dictionary
{ MenuItem = new Dictionary[]
{ new Dictionary {value = "New", onClick = "CreateNewDoc()" },
new Dictionary {value = "Open", onClick = "OpenDoc()" },
new Dictionary {value = "Close", onClick = "CloseDoc()"}
}
}
(Dieses Wörterverzeichnis wird zwecks Veranschaulichung gezeigt. Die Unterstruktur eines Wörterverzeichnisses kann nützlich sein, wenn Sie die Funktion 'serviceLib.convertToJSON()' aufrufen, wird jedoch beim Aufrufen von 'serviceLib.convertFromJSON()' nicht verwendet.)
myTop MyTopPart;
itemString STRING;
serviceLib.convertFromJSON(resp.body, myTop);
itemString = myTop.Menu.popup.MenuItem[2].onClick;