过滤json文件并保存到arraylist android

时间:2013-10-09 05:34:51

标签: java android

如何在arraylist中存储与下面的-bnumber和-cnumber相对应的所有数据。

 {
        "BIBLEBOOK": [
            {
                "-bnumber": "1",
                "-bname": "Genesis",
                "CHAPTER": [
                    {
                        "-cnumber": "1",
                        "VERS": [
                            {
                                "-vnumber": "1",
                                "#text": "Au commencement, Dieu créa les cieux et la terre."
                            },
                            {
                                "-vnumber": "2",
                                "#text": "La terre était informe et vide: il y avait des ténèbres à la surface de l'abîme, et l'esprit de Dieu se mouvait au-dessus des eaux."
                            },
                            {
                                "-vnumber": "3",
                                "#text": "Dieu dit: Que la lumière soit! Et la lumière fut."
                            }
                        ]
                    },
                    {
                        "-cnumber": "2",
                        "VERS": [
                            {
                                "-vnumber": "1",
                                "#text": "Ainsi furent achevés les cieux et la terre, et toute leur armée."
                            },
                            {
                                "-vnumber": "2",
                                "#text": "Dieu acheva au septième jour son oeuvre, qu'il avait faite: et il se reposa au septième jour de toute son oeuvre, qu'il avait faite."
                            }
                        ]
                    },
                    {
                        "-cnumber": "3",
                        "VERS": [
                            {
                                "-vnumber": "1",
                                "#text": "Moïse faisait paître le troupeau de Jéthro, son beau-père, sacrificateur de Madian; et il mena le troupeau derrière le désert, et vint à la montagne de Dieu, à Horeb."
                            },
                            {
                                "-vnumber": "2",
                                "#text": "L'ange de l'Eternel lui apparut dans une flamme de feu, au milieu d'un buisson. Moïse regarda; et voici, le buisson était tout en feu, et le buisson ne se consumait point."
                            },
                            {
                                "-vnumber": "3",
                                "#text": "Moïse dit: Je veux me détourner pour voir quelle est cette grande vision, et pourquoi le buisson ne se consume point."
                            }
                        ]
                    }
                ]
            },
            {
                "-bnumber": "2",
                "-bname": "Exodus",
                "CHAPTER": [
                    {
                        "-cnumber": "1",
                        "VERS": [
                            {
                                "-vnumber": "1",
                                "#text": "Voici les noms des fils d'Israël, venus en Egypte avec Jacob et la famille de chacun d'eux:"
                            },
                            {
                                "-vnumber": "2",
                                "#text": "Ruben, Siméon, Lévi, Juda,"
                            },
                            {
                                "-vnumber": "3",
                                "#text": "Issacar, Zabulon, Benjamin,"
                            }
                        ]
                    }
                ]
            }
        ]
    }

这是我的工作代码但仍然只存储了第一个 - 元数据元素。

JSONArray jObject=new JSONArray(biblebook);   
            biblebookLength = jObject.length();

        /*
         *  <BIBLEBOOK bnumber="1" bname="Genesis">
         */

        for (int arr_size=0;arr_size<biblebookLength;arr_size++){

            JSONObject bibleList= (JSONObject) jObject.get(arr_size);
            bnumber = bibleList.getString("-bnumber");
            bname = bibleList.getString("-bname");

            jsbnumber.SavePreferences("jsbnumber", bnumber);
            jsbname.SavePreferences("jsbname", bname);

            /*
             * Load Selected Books
             * Check if book index equals to booknumber
             * <CHAPTER cnumber="1">
             */

            if (bnumber.equalsIgnoreCase("2")){

                System.out.println("uniquenumber: "+bnumber);
                System.out.println("uniquenumber: "+bname);

                //String chapter =biblebook.replaceAll("\\[\\{\"-bnumber\":\"1\",\"-bname\":\"Genesis\",\"CHAPTER\":","\\{").replaceAll("\\[\\[", "\\[");
                chapter =biblebook.replaceAll("\\[\\{\"-bnumber\":\"1\",\"-bname\":\"Genesis\",\"CHAPTER\":","");


                //Remove first three and last two characters and concatenate result to make json object string.
                String rep_first_two_character = chapter.substring(0, chapter.length()-1);
                String current_string = rep_first_two_character +"]";

                JSONArray testArray=new JSONArray(current_string);   

                for (int count_cnumber=0;count_cnumber<testArray.length();count_cnumber++){

                    JSONObject json_cnumber = (JSONObject) testArray.get(count_cnumber);
                    String cnumx = json_cnumber.getString("-cnumber");

                    System.out.println("cnumx: "+chapter);

                    /*
                            <VERS vnumber="1">Au commencement, Dieu créa les cieux et la terre.</VERS>
                            <VERS vnumber="2">La terre était informe et vide: il y avait des ténèbres à la surface de l'abîme, et l'esprit de Dieu se mouvait au-dessus des eaux.</VERS>
                            <VERS vnumber="3">Dieu dit: Que la lumière soit! Et la lumière fut.</VERS>
                            <VERS vnumber="4">Dieu vit que la lumière était bonne; et Dieu sépara la lumière d'avec les ténèbres.</VERS>
                     */ 

                    if (cnumx.equalsIgnoreCase("1")){ //Change with counter

                        pref_cnumber.SavePreferences("cnumber", cnumx);
                        vers = json_cnumber.getString("VERS");
                        JSONArray jryVers=new JSONArray(vers);   
                        int vers_length=jryVers.length();

                        for (int vers=0;vers<vers_length;vers++){

                            JSONObject objVers= (JSONObject) jryVers.get(vers);
                            vnumber = objVers.getString("-vnumber");
                            xtext = objVers.getString("#text");

                            PostList.add(new bible (bnumber,bname, pref_cnumber.GetPreferences("cnumber"),vnumber,xtext));

                        }
                    }

                }

            }


        }

1 个答案:

答案 0 :(得分:2)

而不是使用String.replaceAllString.substring从JSON字符串中获取CHAPTER,您可以将其转换为JSONArray以提取-cnumber,VERS或其他值。这样做:

for (int arr_size=0;arr_size<biblebookLength;arr_size++){

    JSONObject bibleList= (JSONObject) jObject.get(arr_size);
    bnumber = bibleList.getString("-bnumber");
    bname = bibleList.getString("-bname");

    jsbnumber.SavePreferences("jsbnumber", bnumber);
    jsbname.SavePreferences("jsbname", bname);

     // get CHAPTER JSONArray
      JSONArray arr_chapter=bibleList.getJSONArray("CHAPTER");

       for (int i=0;i<arr_chapter.length();i++){
        JSONObject jsonobj_chapter= arr_chapter.get(i);

            // get -cnumber from CHAPTER object
             String str_cnumber=jsonobj_chapter.getString("-cnumber");

             // get VERS JSONArray from CHAPTER JSON object


              JSONArray arr_vers=jsonobj_chapter.getJSONArray("VERS");

               for (int j=0;j<arr_vers.length();j++){
               JSONObject jsonobj_vers= arr_vers.get(j);

                // get -vnumber from CHAPTER object
                String str_vnumber=jsonobj_chapter.getString("-vnumber");
                // get #text from CHAPTER object
                String str_text=jsonobj_chapter.getString("#text");

          } 
        }

 }