簡體   English   中英

將JSONArray嵌入多個對象/數組中

[英]Getting JSONArray embedded inside multiple objects/arrays

我從服務器返回了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數組的對象中,否則它不起作用。 我確定我可以執行某種類型的遞歸解決方案,但這仍然很煩人。 有什么建議嗎??

使用org.json -library解析JSON就像使用DOM解析XML: org.json 但是:您將需要所有這些循環。

如果您的JSON響應始終看起來像您發布的JSON響應(每個數組中的單個元素),那么您的JSON效果很差。 如果只需要“第一個”條目,請不要在數組上循環。

org.json解析如此復雜的數據結構可能很痛苦。 您是否嘗試過(更為自動化的) google-gson庫? 查看示例 盡管我不想說用gson進行解析在CPU時間方面會更快,但在開發時間方面卻會更快。

我最近也剛剛寫了一篇有關該主題的博客文章: JSON和Java

您可以使用GSON之類的庫為您解析為Java對象,而無需手動進行超越和循環。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM