如何在Android中读取JSON父标记

如何在Android中读取JSON父标记,android,json,arrays,Android,Json,Arrays,我需要你帮我做以下事情。我想读取JSON文件的父标记。下面是我的JSON文件内容 { "ebook": [ {"id":"1","name":"book1"}, {"id":"2","name":"book2"} ], "ebrochure": [ {"id":"1","name":"brochure1"}, {"id":"2","nam

我需要你帮我做以下事情。我想读取JSON文件的父标记。下面是我的JSON文件内容

{
    "ebook":
        [
            {"id":"1","name":"book1"},
            {"id":"2","name":"book2"}
        ],
    "ebrochure":
        [
            {"id":"1","name":"brochure1"},
            {"id":"2","name":"brochure2"}       
        ],
    "emenu":
        [
            {"id":"1","name":"menu1"},
            {"id":"2","name":"menu2"}           
        ]
}
我只需要找出JSON中有多少父标记以及它们是什么。根据我给出的JSON文件,答案应该是3(有3个父JSON标记)和“ebooks、ebrochure、emeu”(父标记的名称)。有什么JAVA类我可以完成我的工作吗

我知道如何读取完整的JSON文件。首先,我们使用
getJSONArray()
方法将JSON传递给
JSONObject
,然后将子对象传递给
JSONArray

但是
getJSONArray()
方法需要父标记的名称。根据我的例子,它可以是电子书、ebrochure或emenu。假设在某种情况下,我们无法看到JSON的内容,只能访问URL。在这种情况下,我需要找出有多少父标签以及它们的名称


那是我的问题。提前感谢您的帮助:-)

您应该阅读以下文档:


基本上,
names()
(在Android中)可以用来获取字段名数组,然后将其用作键。这里我不做一个完整的例子,因为如果你自己尝试的话,你会学到更好。

你应该仔细阅读文档

public static String Fechingdata(String response){
        Id1.clear();
        Id2.clear();
        Id3.clear();
        name1.clear();
        try{
            JSONArray jsonarray = new JSONArray("["+response+"]");
            JSONObject jsonobject = jsonarray.getJSONObject(0);
            parseForResponse1(jsonobject.getString("ebook"),1);
            parseForResponse2(jsonobject.getString("ebrochure"),2);
            parseForResponse3(jsonobject.getString("emenu"),3);
            return response;

        }catch (Exception e) {
            return "\"" + "Access Denied" + "\"";
        }
    }

    private static void parseForResponse1(String res,int i) {
        try{

            JSONArray jsonarray1 = new JSONArray(res);
            Log.d("jsarry1",""+jsonarray1.length());
            for(int i=0;i<jsonarray1.length();i++){
               JSONObject jsonobject = jsonarray1.getJSONObject(i);
               if(i ==1){
                   Id1.add(jsonobject.getString("id"));
                    name1.add(jsonobject.getString("id"));
               }
               if(i ==2){
                   Id2.add(jsonobject.getString("id"));
                    name2.add(jsonobject.getString("id"));
               }
               if(i ==2){
                   Id3.add(jsonobject.getString("id"));
                    name3.add(jsonobject.getString("id"));
               }    
            }

        }
        catch (Exception e) {
            System.out.println(e.toString());
        }

    }
基本上,
names()
(在Android中)可以用来获取字段名数组,然后将其用作键。这里我不做一个完整的例子,因为如果你自己尝试,你会学到更好。

公共静态字符串Fechingdata(字符串响应){
public static String Fechingdata(String response){
        Id1.clear();
        Id2.clear();
        Id3.clear();
        name1.clear();
        try{
            JSONArray jsonarray = new JSONArray("["+response+"]");
            JSONObject jsonobject = jsonarray.getJSONObject(0);
            parseForResponse1(jsonobject.getString("ebook"),1);
            parseForResponse2(jsonobject.getString("ebrochure"),2);
            parseForResponse3(jsonobject.getString("emenu"),3);
            return response;

        }catch (Exception e) {
            return "\"" + "Access Denied" + "\"";
        }
    }

    private static void parseForResponse1(String res,int i) {
        try{

            JSONArray jsonarray1 = new JSONArray(res);
            Log.d("jsarry1",""+jsonarray1.length());
            for(int i=0;i<jsonarray1.length();i++){
               JSONObject jsonobject = jsonarray1.getJSONObject(i);
               if(i ==1){
                   Id1.add(jsonobject.getString("id"));
                    name1.add(jsonobject.getString("id"));
               }
               if(i ==2){
                   Id2.add(jsonobject.getString("id"));
                    name2.add(jsonobject.getString("id"));
               }
               if(i ==2){
                   Id3.add(jsonobject.getString("id"));
                    name3.add(jsonobject.getString("id"));
               }    
            }

        }
        catch (Exception e) {
            System.out.println(e.toString());
        }

    }
Id1.clear(); Id2.clear(); Id3.clear(); name1.clear(); 试一试{ JSONArray JSONArray=新JSONArray(“[”+响应+“]”); JSONObject JSONObject=jsonarray.getJSONObject(0); parseForResponse1(jsonobject.getString(“电子书”),1); parseForResponse2(jsonobject.getString(“ebrochure”),2); parseForResponse3(jsonobject.getString(“emenu”),3); 返回响应; }捕获(例外e){ 返回“\”+“访问被拒绝”+“\”; } } 私有静态void parseForResponse1(字符串res,int i){ 试一试{ JSONArray jsonarray1=新JSONArray(res); Log.d(“jsarry1”,“”+jsonarray1.length()); 对于(int i=0;i
公共静态字符串Fechingdata(字符串响应){
Id1.clear();
Id2.clear();
Id3.clear();
name1.clear();
试一试{
JSONArray JSONArray=新JSONArray(“[”+响应+“]”);
JSONObject JSONObject=jsonarray.getJSONObject(0);
parseForResponse1(jsonobject.getString(“电子书”),1);
parseForResponse2(jsonobject.getString(“ebrochure”),2);
parseForResponse3(jsonobject.getString(“emenu”),3);
返回响应;
}捕获(例外e){
返回“\”+“访问被拒绝”+“\”;
}
}
私有静态void parseForResponse1(字符串res,int i){
试一试{
JSONArray jsonarray1=新JSONArray(res);
Log.d(“jsarry1”,“”+jsonarray1.length());
for(int i=0;i
JSONObject jobj=newjsonobject(您的Json字符串);
JSONArray jarray=jobj.names();
for(int i=0;i
JSONObject jobj=newjsonobject(您的Json字符串);
JSONArray jarray=jobj.names();

对于(inti=0;iSo,JSONObject上有哪些方法可能有用?(顶级JSONObject有3个键/值对。如何通过编程找到这一点?)这没有意义:在某些情况下,我们看不到JSON的内容,只有访问URL,才能获取内容。当您获取内容时,
JSONObject(URLText)。length()
会告诉您“父项”的编号标记:实际上,它们是匿名父对象的子标记。
JSONObject.names()
JSONObject.optJSONArray()
也可能对您有所帮助。@KenY-N是的,如果我在问题中没有提到假设词,这是没有意义的。:-)因为这个假设词背后有一个巨大的故事。如果我告诉summary;在实现Android应用程序后,JSON可以通过添加新的父标记来更改。根据父标记,我显示了一些UI元素。所以我不想每次JSON要用新的父标记编辑时都更改我的代码。如果我可以通过编程识别fy有多少父标记和名称,然后我可以根据这些加载UI。我想现在你知道我为什么写这样的问题了。:-)那么,在JSONObject上有哪些方法可能有用?(顶级JSONObject有3个键/值对。如何通过编程发现这一点?)这没有意义:在某些情况下,我们看不到JSON的内容,只有访问URL,才能获取内容。当您获取内容时,
JSONObject(URLText)。length()
会告诉您“父项”的编号标记:实际上,它们是匿名父对象的子标记。
JSONObject.names()
JSONObject.optJSONArray()
也可能对您有所帮助。@KenY-N是的,如果我在问题中没有提到假设词,这是没有意义的。:-)因为这个假设词背后有一个巨大的故事。如果我告诉summary;在实现Android应用程序后,JSON可以通过添加新的父标记来更改。根据父标记,我显示了一些UI元素。所以我不想每次JSON要用新的父标记编辑时都更改我的代码。如果我可以通过编程识别fy有多少个父标签和名称,然后我可以根据这些加载UI。我想现在你知道我为什么写这样的问题了。:-
getNames(JSONObject jo)
但是上面的字符串中“JSONObject”在哪里?@TusharDhoot Android似乎没有