java - JSON 读取内部数组

标签 java android json dynamic

嗨,我正在开发一个动态 Android 应用程序,我有以下 json。读取每一行都很好我已经弄清楚如何在java中执行此操作(请记住我昨天才开始使用json)我如何将示例item2的内部数组读取到java中的ArrayList我需要某种循环将屏幕截图链接添加到字符串数组。感谢您对我的问题的帮助。

 "Manager": 
[
    { 
"name" : "Sample item", 
"icon" : "http://www.test.com/icon.png", 
"link" : "http://www.test.com/sample.zip", 
"summary" : "sample summary here", 
"screenshots": [ 
    "http://test.com/link2screenshot1.png", 
    "http://test.com/link2screenshot2.png"
    ] 
    },
    { 
"name" : "Sample item2", 
"icon" : "http://www.test.com/icon2.png", 
"link" : "http://www.test.com/sample2.zip", 
"summary" : "sample summary here2", 
"screenshots": [ 
    "http://test.com/2/link2screenshot1.png", 
    "http://test.com/2/link2screenshot2.png"
    ] 
}
]

===编辑===

好吧,这是最终的解决方案,以下方法将从 url 读取 json 并提取我想要的内容,这要归功于 ninetwozero

public ArrayList<String> JSONInner(int count, String url, String outer, String inner){
    ArrayList<String> linkArrayList = new ArrayList<String>();
    URL u = null;
    StringBuilder FileData = null;
    try {
        u = new URL(url);
        String InputData =       null;
        InputStream is =         null;
        DataInputStream dis =    null;
        FileData = new StringBuilder();
        is = u.openStream();
        dis = new DataInputStream(new BufferedInputStream(is));
        while ((InputData = dis.readLine()) != null) {
            FileData.append(InputData);
        }
        is.close();
    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    JSONObject json = null;
    try {
        json = new JSONObject(FileData.toString());
    } catch (JSONException e1) {
        e1.printStackTrace();
    }
    if(FileData.toString() != null) {
        try {
            JSONArray managerArray = json.getJSONArray(outer);
            JSONObject managerObject = managerArray.optJSONObject(count);
            JSONArray linkArray = managerObject.getJSONArray(inner);
            for(int subCount = 0, maxSubCount = linkArray.length(); subCount < maxSubCount; subCount++){
                linkArrayList.add( linkArray.getString( subCount ));
            }
        }catch (JSONException e){
            e.printStackTrace();
        }
    }
    return linkArrayList;
}

最佳答案

我会按照以下方式进行:

//Init
ArrayList<String> linkArrayList = new ArrayList<String>();
JSONArray managerArray = new JSONArray(yourString);

//Iterate over the top-level array
for( int count = 0, max = managerArray.length(); count < max; count++ ) {

    //Get the current JSONObject & the link array
    JSONObject managerObject = managerArray.optJSONObject(count);
    JSONArray linkArray = managerObject.getJSONArray("screenshots");

    //Iterate over the screenshots
    for( 
        int subCount = 0, maxSubCount = linkArray.length(); 
        subcount < maxSubCount; 
        subCount++ 
    ) {

        //Let's store the String
        linkArrayList.add( linkArray.getString( subCount );

    }

}

请告诉我这是否是您正在寻找的内容。 :-)

编辑:但是,这将为您提供所有链接 - 如果您只想要数组项 #2 的链接,那么您可以删除外循环并声明以下内容:

int count = 0; //The 0 should be the index of your item

关于java - JSON 读取内部数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9142418/

相关文章:

java - 在 Android Studio 上调试基于 gradle 的 Java 项目?

json - 在 Play Framework 2.1.x 中将 Scala 案例类漂亮地打印到 JSON 的最简单方法是什么?

java - 有关所使用的 JUnit jar 版本的 Ant JUnit 任务报告(例如 Junit 3、3.8、4)

java - 如何使 GridLayoutManager 的内容居中?

java - Java 小程序怎么样?有什么缺点?

c# - 工具栏中的后退按钮不起作用

javascript - 空 JS 对象

json - SQL Server FOR JSON : Query a list of values and use the first two characters as a key in json object

java - 如何从Java匿名访问MySQL数据库

java - 为什么 list.parallelStream().forEach() 不处理 Java 中列表中的所有元素?