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 解析 JSONorg.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 回答