【问题标题】:How to parse a JSON with 2 json merged in one如何解析一个将 2 个 json 合并为一个的 JSON
【发布时间】:2014-02-18 18:25:25
【问题描述】:

我有这个 JSON:

[{"id_alumno":"109","nombre":"Cristian","apellidos":"Ari\u00f1o Garc\u00eda"},
{"id_alumno":"110","nombre":"Amanda","apellidos":"Barbastro Cauh\u00e9"},
{"id_alumno":"111","nombre":"Manuel","apellidos":"Barcel\u00f3 Borrell"},
{"id_alumno":"112","nombre":"Alejandro","apellidos":"Bueno Bel\u00edo"},
{"id_alumno":"113","nombre":"Alba","apellidos":"Casanova Alquillu\u00e9"},
{"id_alumno":"114","nombre":"Gema","apellidos":"Cortijo Romance"},
{"id_alumno":"115","nombre":"Raquel","apellidos":"De la Fuente Tirado"},
{"id_alumno":"116","nombre":"\u00c1lvaro","apellidos":"Del ni\u00f1o Jes\u00fas Mu\u00f1oz"},
{"id_alumno":"117","nombre":"Alejandro","apellidos":"Escudero Cerd\u00e1"},
{"id_alumno":"118","nombre":"Olaya","apellidos":"Fern\u00e1ndez Luengo"},
{"curso":"2","clase":"B","asignatura":"Matem\u00e1ticas"}]

这是一个连接了 2 个表的 JSON。其中一个有“id_alumno”、“nombre”和“apellidos”,另一个有“curso”、“clase”和“asignatura”

我有这个代码:

静态类 Tarea1 扩展 AsyncTask> { 上下文上下文; ListView 列表; 输入流是; ArrayList listaalumnos = new ArrayList();

    public void cargarContenido (Context contexto)
    {
        this.contexto= contexto;
    }

    @Override
    protected ArrayAdapter<mostrar_alumnos> doInBackground(ListView... params)
    {
        list = params[0];
        String resultado = "fallo";
        mostrar_alumnos alum;
        mostrar_curso_clase_asignatura asign;



        HttpClient cliente = new DefaultHttpClient();
        String URL = "http://"+ip_conexion.IP_Server+"/android/sesion_profesor.php?dia_semana="+dia_semana+"&campo_hora="+campo_hora+"&id_usuario="+id_usuario+"";

        Log.i("httpget", URL);
        HttpGet peticionGet = new HttpGet(URL);
        try{
            HttpResponse response = cliente.execute(peticionGet);
            HttpEntity contenido = response.getEntity();
            is = contenido.getContent(); 
        }catch (ClientProtocolException e)
        {
            e.printStackTrace();
        }catch (IOException e)
        {
            e.printStackTrace();
        }

        BufferedReader buferlector = new BufferedReader (new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String linea = null;
        try{
            while((linea = buferlector.readLine())!=null)
            {
                sb.append(linea);
            }
        }catch (IOException e)
        {
            e.printStackTrace();
        }
        try{
            is.close(); 
        }catch (IOException e) {
            e.printStackTrace();
        }
        resultado = sb.toString(); 
        Log.d("Debug", "Resultado: " + resultado);


        try{
            JSONArray arrayJson = new JSONArray(resultado);

            for(int i= 0; i<arrayJson.length()-1;i++){ 
                JSONObject objetoJson = arrayJson.getJSONObject(i);
                alum = new mostrar_alumnos(objetoJson.getInt("id_alumno"), objetoJson.getString("nombre"), objetoJson.getString("apellidos"));
                JSONObject objetoJson2 = arrayJson.getJSONObject(arrayJson.length()-1);
                String asignatura = new mostrar_curso_clase_asignatura(objetoJson2.getInt("curso"), objetoJson2.getString("clase"), objetoJson2.getString("asignatura")).toString();
                //mTxtView1.setText(asignatura);
                listaalumnos.add(alum); 

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

        ArrayAdapter<mostrar_alumnos> adaptador = new ArrayAdapter<mostrar_alumnos>(contexto, android.R.layout.simple_list_item_1, listaalumnos); //Contexto de ver clientes (Muestra la lista con los datos de clientes que le he pasado

        return adaptador; 
            }

    public class Pair
    {
        public ArrayAdapter<mostrar_alumnos> result;
        public String asignatura;
    }
    protected void onPostExecute(Pair p) 
    {
        list.setAdapter(p.result);
        mTxtView1.setText(p.asignatura);
        }

    }

问题是logcat说:

01-27 10:54:55.590: W/System.err(830): org.json.JSONException: No value for id_alumno
01-27 10:54:55.650: W/System.err(830):  at org.json.JSONObject.get(JSONObject.java:355)
01-27 10:54:55.650: W/System.err(830):  at org.json.JSONObject.getInt(JSONObject.java:444)
01-27 10:54:55.650: W/System.err(830):  at com.example.proyectofin.Alumnos$Tarea1.doInBackground(Alumnos.java:158)
01-27 10:54:55.730: W/System.err(830):  at com.example.proyectofin.Alumnos$Tarea1.doInBackground(Alumnos.java:1)

为什么不读取 id_alumno??

有什么帮助吗?

谢谢!

【问题讨论】:

    标签: java android mysql json eclipse


    【解决方案1】:

    在json数组的末尾,

    {"curso":"2","clase":"B","asignatura":"Matem\u00e1ticas"}
    

    当你的 i 是最后一个元素时,你会得到一个错误,你应该在阅读之前检查它。

    你的情况应该是这样的

    for(int i= 0; i<arrayJson.length() -1 ;i++){
    

    【讨论】:

    • +1,但最好是想出一个更健壮的方法来查看这是什么类型的行。例如,检查它是否包含一个键 "id_alumno""curso"(你可以使用 [JsonObject.has](json.org/javadoc/org/json/JSONObject.html#has(java.lang.String))。
    • 我完全同意,除非您始终准确地获得此列表,并且您 %100 确定列表的最后一个元素会有所不同。比如你得到你的列表并在 Json 中添加一个摘要。
    • 现在,它没有给出这个问题,但是在 Activity 中,没有显示来自 onPostExecute 的 TextView 和 List...
    • 您有列表和空文本视图,或者您根本没有列表?如果您的 textview 为空,则需要在自定义类 mostrar_alumnos 中覆盖 toString()
    • 听起来您现在遇到的问题与原始问题无关。我建议您尝试几分钟来解决它,如果您仍然遇到问题,请发布一个新问题。但首先尝试自己做——努力会带来更多的学习。从长远来看,这是有回报的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多