関連する名前に基づいて Id を見つける必要があります。私のプログラムは、API への REST 呼び出しを行います。API は結果を JSON 形式で返します。名前は一意なので、それを使用して Id 値を取得したいと思います。... には何でも含めることができ、いくつかの {Such}Id キーが含まれていることに注意してください。Id は任意の数の {...{...{...}...}...} でネストできます。ID は常に名前の直前にあります。
注: ... は、プライバシー上の理由から表示できないコードです。コード自体 (プライベート データを除外する前) は、Advanced Rest Client によって返された REST 呼び出しの結果であり、http://jsonlint.com/で有効な JSON であることが検証されています。
コードは次のように返されます。
{
Id: "d5a94d1a-afb7-4e1d-ae0d-a22e01393666"
ProjectId: "ed61c45a-f208-4115-8584-a21a00c51ac0"
Name: "Automated Runs"
OrderNumber: 0
Expands: [3]
0: "Children"
1: "Parent"
2: "Project"
...
scripts: [4]
0: {
Id: "0b70a55c-5e68-4b27-bfcf-a22f00c5dc48"
Name: "3816"
PackageId: "d5a94d1a-afb7-4e1d-ae0d-a22e01393666"
ProjectId: "ed61c45a-f208-4115-8584-a21a00c51ac0"
...
Expands: [6]
0: "Assignments"
1: "Attachments"
2: "FieldControls"
3: "FieldValues"
4: "Package"
5: "Steps"
...
1: {
Id: "14e5c663-0d5a-46bb-ac48-a22f00c15998"
Name: "3814"
PackageId: "d5a94d1a-afb7-4e1d-ae0d-a22e01393666"
ProjectId: "ed61c45a-f208-4115-8584-a21a00c51ac0"
...
Expands: [6]
0: "Assignments"
1: "Attachments"
2: "FieldControls"
3: "FieldValues"
4: "Package"
5: "Steps"
...
2: {
Id: "00d52fcd-b611-4f69-aeb6-a22f00c263a9"
Name: "3815"
ProjectId: "ed61c45a-f208-4115-8584-a21a00c51ac0"
...
Expands: [6]
0: "Assignments"
1: "Attachments"
2: "FieldControls"
3: "FieldValues"
4: "Package"
5: "Steps"
...
3: {
Id: "4d3a6132-8497-4b6b-a064-a22f00c669ff"
Name: "3817"
...
Expands: [6]
0: "Assignments"
1: "Attachments"
2: "FieldControls"
3: "FieldValues"
4: "Package"
5: "Steps"
...
}
私が試したことには、正規表現(私はそれに慣れておらず、いくつかの問題があります)と単純な文字列分割が含まれます。私は文字列分割を機能させていますが、セミハードコーディングされています。
私が欲しいのは次のようなものです:
def getID(myJSON:String, myName:String){
val pattern = "\"Id\": \"*\",\r\n\"Name\":\"" + myName + "\",\""
get the id (*) from result using pattern
}
または、それをジェネリックに変換することをお勧めします。
def getID(myJSON:String, myValue:String, searchKey:String, findKey:String){
val pattern = { ... findKey: *...} in the inner most { ... searchKey: * ...} scope
get the id (*) from result using the pattern in the found {...searchKey...} scope
}
どちらも素晴らしく、非常に高く評価されます。私の現在のコードは次のようになります。
result.split("Id\": \"")(3).split("\"")(0)
きれいかもしれませんが、事故の余地がたくさんあります。Id は、カウントを正しく設定しないなどのユーザーによって作成される可能性があります...
ありがとう、エリック・ストーン