У меня есть следующие данные в Json, как я могу получить данные из этого файла
{"first_name":"immi","last_name":"Ahmad","contact_no":"0333333","dob":"2010-09-29","gender":"Male","pro_id":"3"}
также im, используя http-запрос для доступа к этому файлу из android.i, чтобы получить каждое поле и сохранить его в локальной переменной в android.i, попробовал следующее, но напрасно.
JSONObject json_data = new JSONObject(result); json_data.getJSONObject("userinfo"); json_data.getString("first_name");
это мой полный класс андроидов
public class ProfileActivity extends ActionBarActivity { //data for through http request static InputStream is = null; String result = "flag"; String line = null; int userId; String action="select"; String workTable="user"; ArrayList<HashMap<String, String>> personList; //till here for through http request @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); userId = ((GlobalValues) this.getApplication()).getUserId(); Toast.makeText(ProfileActivity.this, "user id is"+userId, Toast.LENGTH_SHORT).show(); select(); //for retrieval oncreate } public void select() { final ArrayList<HashMap<String, String>> personList; personList = new ArrayList<HashMap<String, String>>(); ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("action", action)); nameValuePairs.add(new BasicNameValuePair("worktable",workTable)); nameValuePairs.add(new BasicNameValuePair("user_id",String.valueOf(userId))); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http......"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); Log.e("pass 1", "connection success "); } catch (Exception e) { Log.e("Fail 1", e.toString()); Toast.makeText(getApplicationContext(), "Invalid IP Address", Toast.LENGTH_LONG).show(); } try { BufferedReader reader = new BufferedReader (new InputStreamReader(is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); Log.e("pass 2", "connection success "); } catch (Exception e) { Log.e("Fail 2", e.toString()); } try { JSONObject userinfo= new JSONObject(result); String fname= userinfo.getString("first_name"); Toast.makeText(ProfileActivity.this, "name is"+fname, Toast.LENGTH_SHORT).show(); String fname= userinfo.getString("first_name"); Toast.makeText(ProfileActivity.this, "name is"+fname, Toast.LENGTH_SHORT).show(); // JSONArray peoples = json_data.getJSONArray("userinfo"); /* for (int i = 0; i < peoples.length(); i++) { JSONObject c = peoples.getJSONObject(i); String first_name = null, last_name = null, gender = null,contact_number=null,dob=null,profession_id=null; first_name = c.getString("first_name"); last_name = c.getString("last_name"); contact_number = c.getString("contact_no"); dob=c.getString("dob"); gender=c.getString("gender"); profession_id=c.getString("pro_id"); final HashMap<String, String> persons = new HashMap<String, String>(); persons.put("firstName", first_name); persons.put("last_name", last_name); persons.put("contact_number", contact_number); persons.put("gender", gender); persons.put("dob", dob); persons.put("pro_id", profession_id); personList.add(persons); Toast.makeText(ProfileActivity.this, "your name is "+first_name, Toast.LENGTH_SHORT).show(); }*/ }catch (Exception e){ Log.e("fil 3",e.toString()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_profile, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long item.getItemId(); switch (item.getItemId()) { case R.id.action_settings: goToHome(); return true; default: return super.onOptionsItemSelected(item); } } public void goToHome(){ Intent gotohome =new Intent(this,MapsActivity.class); startActivity(gotohome); } public void goToEditProfile(View view){ Intent gotoeditprofile=new Intent(this,TabedActivity.class); startActivity(gotoeditprofile); } }
и это мой php statment, который возвращает json, как указано выше
$user_id= $_GET['user_id']; $sqlselectuser="SELECT first_name,last_name,contact_no,dob,gender,pro_id FROM user WHERE user_id='$user_id'"; $ansuser=mysqli_query($con,$sqlselectuser); $resuser=mysqli_fetch_assoc($ansuser); if($resuser['dob']=="0000-00-00"){ $userinfo = array("first_name"=>$resuser['first_name'],"last_name"=>$resuser['last_name'], "contact_no"=>$resuser['contact_no'],"dob"=>date("Ymd"),"gender"=>$resuser['gender'], "pro_id"=>$resuser['pro_id']); echo json_encode($userinfo);
если ваш ответ больше, чем @tiny метод солнечного света не работает
Вы не можете
JSONObject userinfo= new JSONObject(result); userinfo.getString("first_name"); JSONObject someObject = userinfo.getJsonObject("somthing") JSONObject somthingElse = someObject.getJsonObject("somthingElse")
Это становится слишком беспокойным и почти тратит ваше время
Таким образом, ЛУЧШИЙ ОТВЕТ – это Gson Liabrary
Gson gson = new GsonBuilder().create(); Movie movie = gson.fromJson(response, Movie.class);
слышать, что фильм – это класс, который вы нарисовываете из json – show в ссылке ниже
вы можете сделать виз-варшу также
Gson gson = new GsonBuilder().create(); Responce mResponce = gson.fromJson(jsonStr , Responce .class); String mName =mResponce.result.name;
https://stackoverflow.com/a/41218155/4741746
Надеюсь, вы поймете, какой ответ лучше всего
JSONObject userinfo= new JSONObject(result); userinfo.getString("first_name");
Попробуйте использовать Gson
чтобы упростить его!
Это все содержимое json-файла?
Вы должны создать класс для хранения информации каждого json-объекта.
например, вы создаете класс PersonalInformation , имеют экземпляры «firstname», «lastname», «gender» …
Затем мы используем оператор for-loop для чтения всей информации.
Надеюсь, эта помощь!