0

サーバーから 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 配列が存在するオブジェクトにいない限り機能しません。ある種の再帰的な解決策を実行できると確信していますが、これはまだ面倒です。何かアドバイス??

4

2 に答える 2

1

-libraryを使用したJSONのorg.json解析は、DOMを使用したXMLの解析に似ています。ステップバイステップ。ただし、これらすべてのループが必要になります。

JSON応答が常に投稿したもの(すべての配列の単一の要素)のように見える場合、JSONは非常に効果的ではありません。「最初の」エントリだけが必要な場合は、配列をループしないでください。

このような複雑なデータ構造をで解析するのは面倒な場合org.jsonがあります。(より自動化された)google-gsonライブラリを試しましたか?を確認してください。gsonを使用した解析は、CPU時間の点では高速になるとは言いたくありませんが、開発時間の点では不十分に高速になります。

私も最近、このトピックに関するブログ投稿を書きました:JSONとJava

于 2012-07-18T23:54:19.770 に答える
0

GSON などのライブラリを使用して、手動で超越したりループしたりする代わりに、解析して Java オブジェクトにすることができます。

http://java.sg/parsing-a-json-string-into-an-object-with-gson-easily/

于 2012-07-19T00:25:12.377 に答える