2011-09-08 4 views
1

Comment analyser un tableau JSON, Supposons que nous ayons un tableau ci-dessous, comment analyser ce tableau en Java, aidez-moi s'il vous plaît avec un code.JSON Array Parse

[{"guild": "Crimson", "region": "us", "realm": "Caelestrasz", "timestamp": 1311860040}, {"guild": "Crimson", "region": "us", "realm": "Caelestrasz", "timestamp": 1311511740}] 

Répondre

3
String gameJSON = "[{\"guild\": \"Crimson\", \"region\": \"us\", \"realm\": \"Caelestrasz\", \"timestamp\": 1311860040}, {\"guild\": \"Crimson\", \"region\": \"us\", \"realm\": \"Caelestrasz\", \"timestamp\": 1311511740}]"; 
JSONArray array = new JSONArray(gameJSON); 
for (int i = 0; i < array.length(); i++) { 
    System.out.println(array.getJSONObject(i)); 
} 
// Access by key : value 
for (int i = 0; i < array.length(); i++) { 
    JSONObject element = array.getJSONObject(0); 
    System.out.format("Player #%d: Realm = %s, Guild = %s\n" 
          , i + 1, element.get("realm"),element.get("guild")); 

} 

Exemple de code utilisant le JSON.org lib.

+0

Qu'est-ce que vous avez utilisé la bibliothèque? parce que j'ai utilisé ** Simple.json ** et il ne supporte pas * JSONArray (gameJSON) *. Je ne pouvais pas trouver une bonne bibliothèque. –

1

Tout d'abord vous devez avoir le modèle comment le faire! par exemple, nous avons 3 objet comme id, le nom et la famille vous créez une classe et nommez-le comme

model_phpservice 


public class model_phpservice { 
    private int id; 
    private String name; 
    private String family; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getFamily() { 
     return family; 
    } 

    public void setFamily(String family) { 
     this.family = family; 
    } 
} 

après que vous devez avoir écrire un code pour analyser les codes que nous nommons cette classe

phpservices 


public class phpservices { 
    private final Context context; 
    private static final String TAG = "phpservices"; 

    public phpservices(Context context) { 
     this.context = context; 
    } 

    public void jsonrequest(final InterFaceData interFaceData) { 
    JsonArrayRequest jsonArrayRequest = new 
      JsonArrayRequest(Request.Method.GET, "http://yourip/youraddress/", 
      null, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 

      List<model_phpservice> CompleteList=new ArrayList<>(); 
      for (int i = 0; i < response.length(); i++) { 
       model_phpservice getmydata=new model_phpservice(); 
       try{ 

      JSONObject jsonObject = response.getJSONObject(i); 
      getmydata.setId(jsonObject.getInt("id")) ; 
      getmydata.setName(jsonObject.getString("name")); 
      getmydata.setFamily(jsonObject.getString("family")); 
       }catch (JSONException e) { 
        e.printStackTrace(); 
        Log.e(TAG, "getdata: "+"getdata errrorrrr"); 
       } 
      CompleteList.add(getmydata); 

     } 



      if (CompleteList!=null) { 
       Log.i(TAG, "onResponse: " + "itsok"); 

       interFaceData.oninterface(CompleteList); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

      Log.e(TAG, "onErrorResponse: "+"not ok"); 
     } 
    }); 


     jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(8000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
     RequestQueue requestQueue=Volley.newRequestQueue(context); 

     requestQueue.add(jsonArrayRequest); 

} 

    public interface InterFaceData{ 
     void oninterface(List<model_phpservice> listtosend); 
    } 
} 

Je sais que peut-être il est difficile de comprendre, mais que le bon code

http://yourip/youraddress/ 

vous devez mettre votre adresse de la page qui vous donne le code JSON pour ip si vous testez votre application dans l'émulateur, vous pouvez trouver l'adresse IP avec ipconfig cmd

et pour l'interface je l'utilise, nous avons besoin d'interface pour envoyer la liste à l'activité principale

et l'activité principale

public class phpservicesActivity extends AppCompatActivity{ 
    private static final String TAG = "phpservicesActivity"; 
    private Button btn_get; 
    private ListView listView; 
    // private ProgressBar progress; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_phpservices); 

     btn_get=(Button)findViewById(R.id.btn_get); 
     listView=(ListView)findViewById(R.id.list_data); 
     //progress=(ProgressBar)findViewById(R.id.progress3); 


     final phpservices servicesss=new phpservices(this); 

     btn_get.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
      // progress.setVisibility(View.VISIBLE); 
       servicesss.jsonrequest(new phpservices.InterFaceData() { 
        @Override 
        public void oninterface(List<model_phpservice> completelist) { 
         if (listtosend!=null) 
         { 
          Log.i(TAG, "oninterface: "+"interface is ok"); 

          adapterff adapter =new adapterff(phpservicesActivity.this,completelist); 

          listView.setAdapter(adapter); 

         } 
         else{ 
          Log.e(TAG, "oninterface: "+"error in main activity"); 

         } 
        //progress.setVisibility(View.INVISIBLE); 

        } 
       }); 

        } 
     }); 

    } 

et vous avez besoin pour créer de fichier trop 1 la classe adaptateur pour conect listview à la liste et la mise en page 2, nous devons utiliser dans listview

1 adaptateur