不能得到从JSON对象(安卓)数据

问题描述:

我不能解析从URL的JSON响应(“http://www.telekino.com.ar/cupones/control/1267/1027027/84.json”)不能得到从JSON对象(安卓)数据

{"kino":{"ganador":false,"diferencia":""},"rekino":{"ganador":false,"diferencia":""},"carton_formateado":"1.027.027","cupon_numeros":"","premio_extra":false,"cupon_caducidad":"22\/08\/2016","cupon_erroneo":true} 

我用JSONViewr了解树,很简单,但我不能得到布尔型,字符串等我收到永诺空结果

JsonURL= "http://www.telekino.com.ar/cupones/control/1267/1027027/84.json" 



      JsonObjectRequest jsObjRequest = new JsonObjectRequest 
        (Request.Method.GET, JsonURL, null, new Response.Listener<JSONObject>() { 

         @Override 
         public void onResponse(JSONObject response) { 





           try { 
            JSONObject object= response.getJSONObject("object"); 

            algoerroneo = object.getBoolean("algo_erroneo"); 
            JSONObject kino = object.getJSONObject("kino"); 
            kinoganador = kino.getBoolean("ganador"); 
            JSONObject data = kino.getJSONObject("data"); 
            JSONObject Categoria = data.getJSONObject("Categoria"); 
            Smonto = Categoria.getString("monto"); 
            JSONObject Ganador = data.getJSONObject("Ganador"); 
            Saciertos = Ganador.getString("aciertos"); 
            JSONObject rekino = object.getJSONObject("rekino"); 
            rekinoganador = rekino.getBoolean("ganador"); 
            objetoslist = object.toString(); 





           } catch (JSONException e1) { 
            e1.printStackTrace(); 

           } 








          data=String.valueOf(algoerroneo)+" "+String.valueOf(kinoganador)+" "+String.valueOf(rekinoganador)+ "\n"+objetoslist; 
          results.setText(data); 

         } 
        }, new Response.ErrorListener() { 

         @Override 
         public void onErrorResponse(VolleyError error) { 
          // TODO Auto-generated method stub 
          text8.setText("shit2"); 
         } 
        }); 

        // Access the RequestQueue through your singleton class. 
        MySingleton.getInstance(MainActivity.this).addToRequestQueue(jsObjRequest); 
+0

response.getJSONObject(“object”); “对象”没有参数名称直接启动形式“kino” –

+0

也param名称“algo_erroneo”不存在 –

问题出在你得到对象的第一行 JSONObject object = response.getJSONObject(“object”);

这试图通过名称“对象”找到JSONObject,但是,您的JSON中没有任何内容。因此,使用JSONObject“response”参数来引用对象,字符串或布尔值。

例如像这样:

JSONObject kino = response.getJSONObject("kino"); 
+0

不起作用。结果仍然为空。 –

+0

这适用于我。试试这个: JSONObject kino = response.getJSONObject(“kino”); boolean ganador = kino.getBoolean(“ganador”); String carton_formateado = response.getString(“carton_formateado”); –

+0

其工作的字符串。不工作在根 –

为了避免密钥和相关对象的错误,你可以使用POJO和GSON 首先,从这个site

创建您回应的POJO

然后使用GSON库

Gson gson = new Gson(); 
YourPojoClass yourPojoClassObject = gson.fromJson(webresponse, YourPojoClass.class); 

现在你可以从yourPojoClassObject

轻松搞定值
+0

什么是web响应? –

+0

public void onResponse(JSONObject response)here response.toString()called web response。 –

+0

我的肛门跟Thientvse不一样,是他详细解释过的 –

您可以从JSON类(使用http://www.jsonschema2pojo.org/)投与此对象的响应:

结果:

-----------------------------------com.example.Example.java----------------------------------- 

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Example { 

@SerializedName("kino") 
@Expose 
private Kino kino; 
@SerializedName("rekino") 
@Expose 
private Rekino rekino; 
@SerializedName("carton_formateado") 
@Expose 
private String cartonFormateado; 
@SerializedName("cupon_numeros") 
@Expose 
private String cuponNumeros; 
@SerializedName("premio_extra") 
@Expose 
private Boolean premioExtra; 
@SerializedName("cupon_caducidad") 
@Expose 
private String cuponCaducidad; 
@SerializedName("cupon_erroneo") 
@Expose 
private Boolean cuponErroneo; 

public Kino getKino() { 
return kino; 
} 

public void setKino(Kino kino) { 
this.kino = kino; 
} 

public Rekino getRekino() { 
return rekino; 
} 

public void setRekino(Rekino rekino) { 
this.rekino = rekino; 
} 

public String getCartonFormateado() { 
return cartonFormateado; 
} 

public void setCartonFormateado(String cartonFormateado) { 
this.cartonFormateado = cartonFormateado; 
} 

public String getCuponNumeros() { 
return cuponNumeros; 
} 

public void setCuponNumeros(String cuponNumeros) { 
this.cuponNumeros = cuponNumeros; 
} 

public Boolean getPremioExtra() { 
return premioExtra; 
} 

public void setPremioExtra(Boolean premioExtra) { 
this.premioExtra = premioExtra; 
} 

public String getCuponCaducidad() { 
return cuponCaducidad; 
} 

public void setCuponCaducidad(String cuponCaducidad) { 
this.cuponCaducidad = cuponCaducidad; 
} 

public Boolean getCuponErroneo() { 
return cuponErroneo; 
} 

public void setCuponErroneo(Boolean cuponErroneo) { 
this.cuponErroneo = cuponErroneo; 
} 

} 
-----------------------------------com.example.Kino.java----------------------------------- 

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Kino { 

@SerializedName("ganador") 
@Expose 
private Boolean ganador; 
@SerializedName("diferencia") 
@Expose 
private String diferencia; 

public Boolean getGanador() { 
return ganador; 
} 

public void setGanador(Boolean ganador) { 
this.ganador = ganador; 
} 

public String getDiferencia() { 
return diferencia; 
} 

public void setDiferencia(String diferencia) { 
this.diferencia = diferencia; 
} 

} 
-----------------------------------com.example.Rekino.java----------------------------------- 

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Rekino { 

@SerializedName("ganador") 
@Expose 
private Boolean ganador; 
@SerializedName("diferencia") 
@Expose 
private String diferencia; 

public Boolean getGanador() { 
return ganador; 
} 

public void setGanador(Boolean ganador) { 
this.ganador = ganador; 
} 

public String getDiferencia() { 
return diferencia; 
} 

public void setDiferencia(String diferencia) { 
this.diferencia = diferencia; 
} 

} 

然后

JsonURL = “http://www.telekino.com.ar/cupones/control/1267/1027027/84.json

JsonObjectRequest jsObjRequest = new JsonObjectRequest 
      (Request.Method.GET, JsonURL, null, new Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 





        try { 
         // JSONObject object= response.getJSONObject("object"); 


         JSONObject kinoObject = response.getJSONObject("kino"); 
         JSONObject rekinoObject = response.getJSONObject("rekino"); 


         Gson gson = new Gson(); 

         Kino kino = gson.fromJson(kinoObject.toString(), Kino.class); 
         Rekino rekino = gson.fromJson(rekinoObject.toString(), Rekino.class); 
         Example example = gson.fromJson(response.toString(), Example.class); 



        } catch (JSONException e1) { 
         e1.printStackTrace(); 

        } 








        data=String.valueOf(algoerroneo)+" "+String.valueOf(kinoganador)+" "+String.valueOf(rekinoganador)+ "\n"+objetoslist; 
        results.setText(data); 

       } 
      }, new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 
        // TODO Auto-generated method stub 
        text8.setText("shit2"); 
       } 
      }); 

    // Access the RequestQueue through your singleton class. 
    MySingleton.getInstance(MainActivity.this).addToRequestQueue(jsObjRequest); 

我希望这将有助于您的问题!

否则,您可以使用Retrofit,它很容易与JSON和HTTP一起使用!

+0

我刚修改了一小段,可以再检查一下。很好,帮你 – Thientvse

+0

没有工作。结果仍然为空。 –

+0

哦,对不起,我有一个错误,我编辑它,你可以再次检查! – Thientvse

下载RoboPOJOGenerator插件并安装it.It将JSON字符串自动转换为Java POJO类。

https://github.com/robohorse/RoboPOJOGenerator

,并使用GSON库来存储和使用下面的代码在POJO类检索该值。

Gson gson = new Gson(); 
Classname objectname = gson.fromJson(jsonString,Classname.class);