在android中解析简单的json字符串

我想用json创建一个登录和注册系统。 我想首先获取url的内容,然后解析json字符串。 Json String示例:

{ "employee":{"mesg":"username is exsist!","id":0,"name":0,"username":0,"email":0,"status":500} } 

我只需要mesg或状态。 我无法解析它。 每次我想要解析这个字符串,我的应用程序都会强制停止

这是我的代码:

  package com.sourcey.materiallogindemo; import android.app.ProgressDialog; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import butterknife.Bind; import butterknife.ButterKnife; public class SignupActivity extends AppCompatActivity { //URL to get JSON Array //JSON Node Names public String nurl; private static final String TAG = "SignupActivity"; @Bind(R.id.input_name) EditText _nameText; @Bind(R.id.input_email) EditText _emailText; @Bind(R.id.input_tell) EditText _tellText; @Bind(R.id.input_password) EditText _passwordText; @Bind(R.id.btn_signup) Button _signupButton; @Bind(R.id.link_login) TextView _loginLink; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_signup); ButterKnife.bind(this); _signupButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { signup(); } }); _loginLink.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Finish the registration screen and return to the Login activity finish(); } }); } public void signup() { Log.d(TAG, "Signup"); if (!validate()) { onSignupFailed(); return; } _signupButton.setEnabled(false); final ProgressDialog progressDialog = new ProgressDialog(SignupActivity.this, R.style.AppTheme_Dark_Dialog); progressDialog.setIndeterminate(true); progressDialog.setMessage("در حال انجام عملیات..."); progressDialog.show(); String name = _nameText.getText().toString(); String email = _emailText.getText().toString(); String tell = _tellText.getText().toString(); String password = _passwordText.getText().toString(); // TODO: Implement your own signup logic here. nurl = "http://someurl/json/user.php?type=register&mobile="+tell+"&p="+password+"&email="+email+"&name="+name; //new JSONParse().execute(); new android.os.Handler().postDelayed( new Runnable() { public void run() { onSignupSuccess(); progressDialog.dismiss(); } }, 3000); } public void onSignupSuccess() { _signupButton.setEnabled(true); setResult(RESULT_OK, null); finish(); } public void onSignupFailed() { Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show(); _signupButton.setEnabled(true); } public boolean validate() { boolean valid = true; String name = _nameText.getText().toString(); String email = _emailText.getText().toString(); String tell = _tellText.getText().toString(); String password = _passwordText.getText().toString(); if (name.isEmpty() || name.length() < 3) { _nameText.setError("at least 3 characters"); valid = false; } else { _nameText.setError(null); } if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) { _emailText.setError("enter a valid email address"); valid = false; } else { _emailText.setError(null); } if (tell.isEmpty() || !android.util.Patterns.PHONE.matcher(tell).matches()) { _tellText.setError("enter a valid phone number"); valid = false; } else { _tellText.setError(null); } if (password.isEmpty() || password.length()  10) { _passwordText.setError("between 4 and 10 alphanumeric characters"); valid = false; } else { _passwordText.setError(null); } return valid; } } 

现在我不知道我能做什么来解析字符串并得到正好的状态或者mesg,谢谢掌舵。 我非常需要这个,对不成熟的问题感到抱歉。 问候

您可以使用JSONObject执行此任务。

例如(省略try / catch):

 JSONObject root = new JSONObject(jsonString); JSONObject employee = root.getJSONObject("employee"); String message = employee.getString("name"); String username = employee.getString("username"); String email = employee.getString("email"); int id = employee.getInt("id"); int status = employee.getInt("status"); 

如果您不确定JSON的一致性,则应首先检查密钥是否存在 。

您还应该检查您的JSON数据类型,您似乎有名称,用户名和电子邮件的整数。 但是,这些很少是整数。

JSONObject文档 。

有些库可以帮助你解析Json,你可以使用gson或Jackson 。 我实际上使用了改造来调用我的API,因为它允许你插入一个json反序列化器然后它只是为你完成所有的工作。 它还处理所有HTTP调用,使用起来相当简单。

建议你去Volley。 下面是相同的示例代码

 JsonObjectRequest jsonObjReqfirst = new JsonObjectRequest(Request.Method.GET,urlBuffer.toString(),null, new Response.Listener(){ @Override public void onResponse(JSONObject response) { Log.i(Constants.NETLOG, "Volley response= " + response.toString()); getResponseprocessed(response)); } }, new Response.ErrorListener(){ @Override public void onErrorResponse(VolleyError error) { Log.e(Constants.NETLOG, "VolleyError response= " + error.toString()); } }); Volley.newRequestQueue(mContext).add(jsonObjReqfirst); void getResponseprocessed(JSONObject response){ try { JSONObject statusObj = response.getJSONObject("employee"); String mseg=statusObj.getString("mesg"); int status = statusObj.getInt("status"); } catch (JSONException e) { e.printStackTrace(); } } 

使用Volley库从url获取JSON响应,如下所示 –

首先在项目中添加库模块:app依赖项如下 –

 dependencies { compile 'com.mcxiaoke.volley:library-aar:1.0.1' ... } 

使用以下代码获取Volley Library的回复 –

 // Instantiate the RequestQueue. RequestQueue queue = Volley.newRequestQueue(this); String url = "WEBSERVICE_URL"; // eg:- "http://www.google.com"; // Request a string response from the provided URL. StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener() { @Override public void onResponse(String response) { System.out.println("Response is: " + response); try { JSONObject jobj = new JSONObject(response); JSONObject jEmp = jobj.getJSONObject("employee"); String message = jEmp.getString("mesg"); int Status = jEmp.getInt("status"); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if(error.networkResponse != null && error.networkResponse.data != null){ VolleyError verror = new VolleyError(new String(error.networkResponse.data)); System.out.println("That didn't work!\n" + error.toString()); } } }); // Add the request to the RequestQueue. queue.add(stringRequest); 

你可以解析JSON如下 –

  try { JSONObject jobj = new JSONObject(responseJSONString); JSONObject jEmp = jobj.getJSONObject("employee"); String message = jEmp.getString("mesg"); int Status = jEmp.getInt("status"); } catch (JSONException e) { e.printStackTrace(); } `responseJSONString` is the JSON response you got.