过滤Json Array数据

时间:2018-10-19 12:38:44

标签: android json android-studio

我有一个要在列表视图中解析的数据的json。我怎么能在列表视图中解析所有带有“ PROMOS且没有” PROMOS”的json数据...?我尝试过这种方式,但它只为我带来json结果中的前5个数据,它不会加载“ PROMOS”部分 这是我的java类。...

protected String doInBackground(String... strings) {
        prod = new ArrayList<>();
        lista_eligida = (ListView) findViewById(R.id.lista);

        String url = "http://danbijann.freeiz.com/tareas.json";
        HttpHandler sh = new HttpHandler();
        JSONObject jsonStr = sh.makeServiceCall(url);

        try {
            JSONObject jsonObj = new JSONObject(String.valueOf(jsonStr));
            Log.e("JSON", String.valueOf(jsonStr));
            JSONArray contacts = jsonObj.getJSONArray("PEDIDOS");
            for (int i = 0; i < contacts.length(); i++) {
                JSONObject c = contacts.getJSONObject(i);
                String prueba = "";
                if(jsonObj.has("prueba") && !jsonObj.isNull("prueba")){
                    prueba = c.getString("prueba");
                }

                String promocion = "";
                if(jsonObj.has("promocion") && !jsonObj.isNull("promocion")) {
                    promocion = c.getString("promocion");
                }

                String prueba2 = "";
                if(jsonObj.has("prueba2") && !jsonObj.isNull("prueba2")) {
                    prueba2 = c.getString("prueba2");
                }
                String codig = c.getString("codigo");
                String des = c.getString("descrip");
                String prec = c.getString("precio");
                String cantidad = c.getString("cantidad");
                String ubica = c.getString("ubica");




                HashMap<String, String> contacto = new HashMap<>();
                contacto.put("codigo", codig);
                contacto.put("descrip", des);
                contacto.put("precio", prec);
                contacto.put("cantidad", cantidad);
                contacto.put("ubica", ubica);
                contacto.put("preuba", prueba);
                contacto.put("promocion", promocion);
                contacto.put("prueba2", prueba2);

                Log.d("ADAP", codig);
                Log.d("ADAP", des);
                Log.d("ADAP", prec);
                Log.d("ADAP", cantidad);
                Log.d("ADAP", ubica);

                prod.add(contacto);
            }
        } catch (final JSONException e) {
            e.getMessage();
        }
        return null;
    }
    protected void onPostExecute(String result) {
        if (pDialog.isShowing())
            pDialog.dismiss();
        super.onPostExecute(result);
        final ListAdapter adapter = new SimpleAdapter(MainActivity.this, prod,
                R.layout.item_carrito, new String[]{ "codigo", "descrip", "precio", "cantidad","ubica","prueba","promocion","prueba2"},
                new int[]{R.id.txtcodigo, R.id.txtdescrip, R.id.txtprecio, R.id.cantidad, R.id.txtubica, R.id.txtprueba, R.id.txtpromo, R.id.txtprueba2});
        lista_eligida.setAdapter(adapter);

有我的JSON文件

    {  
   "PEDIDOS":[  
      {  
         "codigo":"AB235695-1",
         "descrip":"MONITOR SAMDUNG DE 32 PULGADAS",
         "precio":"526559",
         "cantidad":"4",
         "ubica":"A:002 S:005 F:001"
      },
      {  
         "codigo":"B005695-5",
         "descrip":"CPU INTEL PRUEBA DE ESPACIO",
         "precio":"526559",
         "cantidad":"2",
         "PROMOS":[  
            {  
               "ubica":"A:002 S:005 F:001",
               "promocion":"50 off",
               "prueba":"datos mas por prueva",
               "prueba2":"otro mas "
            }
         ]
      },
      {  
         "codigo":"AB235-6",
         "descrip":"MONITOR SAMDUNG DE 32 PULGADAS",
         "precio":"526559",
         "cantidad":"2",
         "ubica":"A:002 S:005 F:001"
      },
      {  
         "codigo":"A56895-11",
         "descrip":"MONITOR SAMDUNG DE 32 PULGADAS",
         "precio":"526559",
         "cantidad":"14",
         "ubica":"A:002 S:005 F:001"
      },
      {  
         "codigo":"B04565-50",
         "descrip":"CPU INTEL PRUEBA DE ESPACIO",
         "precio":"526559",
         "cantidad":"20",
         "PROMOS":[  
            {  
               "ubica":"A:002 S:005 F:001",
               "promocion":"50 off",
               "prueba":"datos mas por prueva",
               "prueba2":"otro mas "
            }
         ]
      }
   ]
}

1 个答案:

答案 0 :(得分:0)

要从PROMOS中获取数据,必须浏览阵列

protected String doInBackground(String... strings) {
    prod = new ArrayList<>();
    lista_eligida = (ListView) findViewById(R.id.lista);

    String url = "http://danbijann.freeiz.com/tareas.json";
    HttpHandler sh = new HttpHandler();
    JSONObject jsonStr = sh.makeServiceCall(url);

    try {
        JSONObject jsonObj = new JSONObject(String.valueOf(jsonStr));
        Log.e("JSON", String.valueOf(jsonStr));
        JSONArray contacts = jsonObj.getJSONArray("PEDIDOS");
        for (int i = 0; i < contacts.length(); i++) 
        {
            JSONObject c = contacts.getJSONObject(i);

            String codig = c.getString("codigo");
            String des = c.getString("descrip");
            String prec = c.getString("precio");
            String cantidad = c.getString("cantidad");

            String prueba = "";
            String prueba2 = "";
            String ubica = "";
            String promocion = "";

            if(jsonObj.has("PROMOS") && !jsonObj.isNull("PROMOS")) 
            {

                JSONArray promos = jsonObj.getJSONArray("PROMOS");
                for(int j=0;j<promos.length();j++)
                {


                        if(promos.get(j).has("ubica") && !promos.get(j).isNull("ubica")) {
                            ubica = c.getString("ubica");
                        }

                        if(promos.get(j).has("promocion") && !promos.get(j).isNull("promocion")) {
                            promocion = c.getString("promocion");
                        }

                        if(promos.get(j).has("prueba") && !promos.get(j).isNull("prueba")){
                            prueba = c.getString("prueba");
                        }

                        if(promos.get(j).has("prueba2") && !promos.get(j).isNull("prueba2")) {
                            prueba2 = c.getString("prueba2");
                        }

                }
            }



            HashMap<String, String> contacto = new HashMap<>();
            contacto.put("codigo", codig);
            contacto.put("descrip", des);
            contacto.put("precio", prec);
            contacto.put("cantidad", cantidad);
            contacto.put("ubica", ubica);
            contacto.put("preuba", prueba);
            contacto.put("promocion", promocion);
            contacto.put("prueba2", prueba2);

            Log.d("ADAP", codig);
            Log.d("ADAP", des);
            Log.d("ADAP", prec);
            Log.d("ADAP", cantidad);
            Log.d("ADAP", ubica);

            prod.add(contacto);
        }
    } catch (final JSONException e) {
        e.getMessage();
    }
    return null;
}

仅供参考:如果您的PROMOS数组包含多个对象,那么只会添加最后一个对象,在这种情况下,您必须创建一个promos的arrayList,然后在HMAP中添加该数组列表