サーバーから JSON 応答が返されます。取得する必要がある配列は、複数のオブジェクトと配列の奥深くに埋め込まれた値です。formatIds JSONArrayを取得する必要があります。私のJSONは次のようになります。
{
"entries": [
{
"title": "sample",
"targets": [
{
"format": "wav",`enter code here`
"description": "A wav file",
"formatCriteria": [
{
"formatSelectionTitle": "Find WAV files",
"formatSteps": {
"UniqueId": "214212312321",
"formatMatches": {
"formatIds": [
"WAV",
"MP3"
]
}
}
}
]
}
]
}
]
}
私が理解できた唯一の方法は、一連の for ループを埋め込むことです。
String[] assetUri;
for (int i = 0; i < entriesArray.length(); i++) {
entryJsonOjbect = entriesArray.getJSONObject(i);
fileTargetArray = tempObj.getJSONArray("targets");
//Loop through the targets array
for (int j = 0; j < fileTargetArray.length(); j++) {
tempObj = fileTargetArray.getJSONObject(j);
fileCriteriaArray = tempObj.getJSONArray("formatCriteria");
//Loop through fileCriteria Array
for (int h = 0; h < fileCriteriaArray.length(); h++) {
JSONObject fileCriteriaObj = fileCriteriaArray.getJSONObject(h);
//Get the JSON Object 'formatSteps'
JSONObject selectStepObj = fileCriteriaObj.getJSONObject("formatSteps");
//Get the JSON Object 'formatMatches'
JSONObject selectionMatches = selectStepObj.getJSONObject("formatMatches");
//FINALLY. Get the formatIds ARray
JSONArray assetTypeArray = selectionMatches.getJSONArray("formatIds");
//Assign the values from the JSONArray to my class
assetUri = new String[assetTypeArray.length()];
for (int z = 0; z < assetTypeArray.length(); z++) {
assetUri[z] = assetTypeArray.getString(z);
}
}
}
}
このコードは、すべての組み込みループが原因で、x20 が非常に遅くなります。この余分なコードを使用せずに、この JSONArray を取得する方法はありますか?? jQuery にはJSON.findがあり、Java にこれに似たものがあるかどうか疑問に思っていましたか? JSON API 呼び出しで getJSONArray を呼び出してルート jsonObject を取得しようとしましたが、json 配列が存在するオブジェクトにいない限り機能しません。ある種の再帰的な解決策を実行できると確信していますが、これはまだ面倒です。何かアドバイス??