1

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 :)

4
  • You're getting JSONObject into json array so it returns null... Commented May 5, 2017 at 10:01
  • 1
    ITs not an array but object Commented May 5, 2017 at 10:01
  • JSONObject enclosed within { } and JSONArray within [ ] Commented May 5, 2017 at 10:03
  • Thanks, I understand Commented May 5, 2017 at 10:27

4 Answers 4

1

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;
}
Sign up to request clarification or add additional context in comments.

Comments

0

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;
        }

5 Comments

I can't change this response, it is on web server in working system.
Thanks, it works, but i have problems to put it in list fragment already:(
Glad it worked.Please accept my answer.You can also visit : stackoverflow.com/tour to get more information about SO and support me as much as you can.
put your list fragment here
ArrayList is a genius thought, thanks, it works! Ehh, I still need to learn so much)
0

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();
    }

Comments

0

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");
}

5 Comments

JSONObject value = json.get(key); It required JSONObject, but found java.lang.object
@Максим Райлян change code JSONObject value = json.get(key); with JSONObject value = (JSONObject)json.get(key); line too
@KeyurThumar java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference:( It's still null
@МаксимРайлян could you try once more with my updated answer
@МаксимРайлян use my code from my answer from added below. It is tested one with json format in question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.