Json array parsing always has null result in Android

How I can parse this json array?

{"1":
{"0":"3","id_disc":"3","1":"Дослідження і проектування компютерних систем","name":"Дослідження і проектування компютерних систем","2":"ДПКМС ","s_name":"ДПКМС "}
,"2":
{"0":"5","id_disc":"5","1":"Цивільний захист і охорона праці в галузі","name":"Цивільний захист і охорона праці в галузі","2":"ЦЗ і ОП","s_name":"ЦЗ і ОП"}
,"3":
{"0":"1","id_disc":"1","1":"Дослідження і проектування  інтелектуальних систем (Лекція)","name":"Дослідження і проектування  інтелектуальних систем (Лекція)","2":"ДіПІС","s_name":"ДіПІС"}
}

I was trying this method, but I always have null result.

String[] sA = new String[100];
try {
    JSONArray cast = getDisc(paraaams).getJSONArray(" ");
    for (int i=0; i<cast.length(); i++) {
        JSONObject disc = cast.getJSONObject(i);
        sA[i-1] = disc.getString("name");
    }
}catch (JSONException e){}


           // sA[0]=getDisc(paraaams).toString();

     ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
                android.R.layout.simple_list_item_1, sA);

        listView.setAdapter(adapter);

public JSONArray getDisc(Object params[]){
        HTTPWorker httpWorker=new HTTPWorker();
            JSONArray mjson =new JSONArray();
        String s = httpWorker.doInBackground(params);
try {
    mjson = new JSONArray(s);
    Log.e("JSONinClass ",mjson.toString());

}catch (JSONException e){}

        return mjson;

I think i try to parse it like json object, but i don't know how correct work with json arrays.

Thanks for help:)

my ListFragment:

public class MyFilesActivity extends android.app.Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_myfiles, null);

        ListView listView = (ListView) rootView.findViewById(R.id.listView);
        String[] sA = new String[100];

        JSONObject jsonObject = null;
        try {
            jsonObject = new JSONObject(getDisc(paraaams).toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
        int i =0;
        Iterator<String> iterator = jsonObject.keys();
        while (iterator.hasNext()) {
            String key = iterator.next();
            try {
                if (jsonObject.has(key)) {
                    JSONObject value = jsonObject.getJSONObject(key);
                    // value is another JSONObject where you can get the "name" from
                        String name = value.getString("name");
                    sA[i]=name;
                        Log.e("value= ", name);
                    i+=1;
                }
            } catch (JSONException e) {
                // Something went wrong!
                e.printStackTrace();
            }
        }
           // sA[0]=getDisc(paraaams).toString();
     ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
                android.R.layout.simple_list_item_1, sA);
        listView.setAdapter(adapter);
    return rootView;
    }

I cut it a bit, removed it is not important for the question :)

Upvotes: 1

Views: 1188

Answers (4)

Bhupat Bheda
Bhupat Bheda

Reputation: 1978

try this:

please check below changes replace array to arraylist



  public class MyFilesActivity extends android.app.Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.activity_myfiles, null);

            ListView listView = (ListView) rootView.findViewById(R.id.listView);
            ArrayList<String> sA = new ArrayList<>();

            JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(getDisc(paraaams).toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }

            Iterator<String> iterator = jsonObject.keys();
            while (iterator.hasNext()) {
                String key = iterator.next();
                try {
                    if (jsonObject.has(key)) {
                        JSONObject value = jsonObject.getJSONObject(key);
                        // value is another JSONObject where you can get the "name" from
                            String name = value.getString("name");
                        sA.add(name);
                            Log.e("value= ", name);

                    }
                } catch (JSONException e) {
                    // Something went wrong!
                    e.printStackTrace();
                }
            }
               // sA[0]=getDisc(paraaams).toString();
         ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
                    android.R.layout.simple_list_item_1, sA);
            listView.setAdapter(adapter);
        return rootView;
        }

Upvotes: 0

Denny
Denny

Reputation: 1783

It is just a plain JSONObject not an JSONArray, so you have to cast it to a JSONObject first

JSONObject json = new JSONObject(jsonString);

To loop through it

for (Iterator<String> iter = json.keys(); iter.hasNext();) {
    String key = iter.next();
    JSONObject value = (JSONObject) json.getJSONObject(key);
    String name = value.getString("name");
}

Upvotes: 0

keyur thumar
keyur thumar

Reputation: 616

Here is a tested code to parse json.

 try {
        JSONObject json = new JSONObject(json);
        int jsonLength = json.length();

        for(int i=1; i<=jsonLength; i++){

            JSONObject jObject = json.getJSONObject(""+i);

            String data = jObject.getString("0");
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

Upvotes: 0

Mohammad nabil
Mohammad nabil

Reputation: 1020

Try this for your Response to Parse

May Help you

try{
      JSONObject jsonObject = new JSONObject(response);
      List<String> keyList = getAllKeys(jsonObject);
      for(String key : keyList){
          JSONObject innerObject = jsonObject.getJSONObject(key);
          List<String> innerKeyList = getAllKeys(innerObject);
          for(String innerKey: innerKeyList){
              System.out.println(innerObject.getString(innerKey));
          }
      }
    }catch(Exception e){
        e.printStackTrace();
    }

This method will return keys

private List<String> getAllKeys(JSONObject jsonObject) throws JSONException{
    List<String> keys = new ArrayList<String>();

    Iterator<?> iterator = jsonObject.keys();
      while( iterator.hasNext() ) {
          String key = (String)iterator.next();
          keys.add(key);
      }
      return keys;
}

Upvotes: 1

Related Questions