JSon Читать внутренний массив - PullRequest
0 голосов
/ 04 февраля 2012

Привет, я работаю над динамическим приложением для Android, и у меня есть следующий json.Хорошо читать каждую строку. Я понял, как это сделать в Java (имейте в виду, что я только начал работать с json вчера), как я могу прочитать внутренний массив, например, item2, в ArrayList в Java, мне нужен какой-то циклдобавить в строковый массив скриншоты ссылок.Спасибо за любую помощь с моей проблемой.

 "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"
    ] 
}
]

=== РЕДАКТИРОВАТЬ ===

Хорошо, вот окончательное решение, следующий метод будет читать jsonиз URL и вытащить то, что я хочу, благодаря 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;
}

1 Ответ

1 голос
/ 04 февраля 2012

Я бы сделал это следующим образом:

//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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...