Parse JSON con valores de ambos lados
Estoy usando volley para obtener respuesta de API, pero la respuesta consiste en STATE_ID: STATE_NAME par (ie value:value pair)
y necesito los valores de ambos lados en diferentes cadenas. Necesito estos valores para poner en un spinner de modo que cuando el usuario selecciona un State
puedo obtener su ID correspondiente también.
// JSON response { "1": "West bengal", "3": "Himachal Pradesh", "4": "Maharashtra", "11": "Queensland" }
Mi código
- Utilizar GSON para analizar un JSON con "clave" dinámica y "valor" en android
- Deserialización GSON con tipos genéricos y nombres genéricos de campos
- Vaciar RecyclerView utilizando datos obtenidos de parse.com
- El análisis de Json con gson devuelve un objeto nulo
- Quiero google play store como scrollview
public class MainActivity extends AppCompatActivity { private static final String STATE = "MY_API"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void login(View v){ loginRequest(); } private void loginRequest() { StringRequest stringRequest = new StringRequest(Request.Method.POST, STATE, new Response.Listener<String>() { @Override public void onResponse(String response) { Toast.makeText(MainActivity.this, response, Toast.LENGTH_SHORT).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(getApplicationContext(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("country_id","2"); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); requestQueue.add(stringRequest); } }
- Org.json.JSONException: Objeto no terminado en el carácter 14
- ¿Pueden las anotaciones de Gson y Jackson coexistir en el mismo POJO?
- AsycnTask # 3 error al analizar el objeto JSON. String no se puede convertir a JSONObject
- Android: los datos de la cadena JSON se comparan con otra cadena
- Cree un archivo JSON analizable para la aplicación android
- Enviando cadena UTF-8 usando HttpURLConnection
- ArrayIndexOutOfBoundsException error en el análisis de datos JSON
- Cómo validar las credenciales de inicio de sesión de usuario en android con PHP, MySql con la ayuda de json
Ya tienes el método iterate()
como discutimos en los comentarios.
Hecho un poco de trabajo para darle valor:
try { JSONObject jsonObject = new JSONObject(response); for (String key : iterate(jsonObject.keys())) { Toast.makeText(this, "Key : "+key+" Value: "+jsonObject.optString(key), Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); }
Por favor, consulte el método de iterate
de esta respuesta . He publicado esto como una nueva respuesta porque OP no pudo hacer para los valores .. !!
He utilizado iterador para encontrar una clave. Que esto ayude:
private void parseRespone(String response){ try { JSONObject MainjsonObject = new JSONObject(response) Iterator<String> iter= MainjsonObject.keys(); //To get keys of an object while (iter.hasNext()) { String key = (String)iter.next(); //Object value = jsonobj.get(key); //To use by object String valueStr = jsonobj.get.getString(key); Log.i("Jsonparsing", "key= "+key + "\n Value=" +valueStr ); Toast.makeText(getActivity(),"key= "+ key + "\n value= " + valueStr ,Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); }catch (Exception e) { e.printStackTrace(); } }
Podría encontrar una clave desconocida por esto. Por favor, compruebe en un Iniciar sesión en su android estudio … aquí he puesto Toast también ..
Y llamar a esta función aquí …
........... @Override public void onResponse(String response) { parseRespone(response); //Function to parse json }
Gracias..
Será mucho mejor si usted considera cambiar su respuesta a algo como esto:
[ {"ID":"1","name": "West bengal"}, {"ID":"3","name": "Himachal Pradesh"}, {"ID":"4","name": "Maharashtra"}, {"ID":"11","name": "Queensland"} ]
He intentado esta solución y funcionó hacia fuera. "Aquí, la" llave "tostará el key_value [1, 4, 11] y el valor imprimirá los nombres [Bengala del oeste, Himachal Pradesh, Maharashtra, Queensland].
JSONObject list_object = inner_json_object.getJSONObject ("");
for (String key : iterate(list_object.keys())) { // here key will be containing your OBJECT NAME YOU CAN SET IT IN TEXTVIEW. Toast.makeText(Activity.this, ""+key, Toast.LENGTH_SHORT).show(); String value = bank_list_object.optString(key); }` private <T> Iterable<T> iterate(final Iterator<T> i){ return new Iterable<T>() { @Override public Iterator<T> iterator() { return i; } }; }
Puede utilizar jsonObject.names()
(o keys()
para un Iterator) para recuperar todas las claves. Después de que usted puede iterar a través de la matriz con las teclas y almacenar sus cadenas.
https://developer.android.com/reference/org/json/JSONObject.html#names () https://developer.android.com/reference/org/json/JSONObject.html#keys ()
- Cómo puedo mostrar el texto de HIndi en la tableta Android
- ¿Por qué mi aplicación está intentando utilizar drawable-mdpi / title_bar_shadow.9.png?