El análisis de JSON desde un archivo en un servidor

Jim1993:

Estoy trabajando en un proyecto androide que analiza JSON desde un archivo en un servidor y convertir los datos a objetos Java para visualizar los datos mediante las vistas de texto.

He creado una conexión HTTP para que la aplicación se puede realizar una solicitud GET al servidor para recuperar el contenido del archivo. También tengo un método para convertir JSON para mostrar la cuerda y JSON en el Logcat, por lo que sé la solicitud GET se ha realizado correctamente.

Me pasa una cadena que contiene la dirección URL para el servidor y usar mi HttpHandler para hacer la conexión.

private class parseJSON extends AsyncTask<Void, Void, List<Book>> {

    private final String TAG = parseJSON.class.getSimpleName();
    @Override
    protected List<Book> doInBackground(Void... voids) {
        Log.i(TAG, "Start Async to get books.");
        ArrayList<Book> bookArray = new ArrayList<>(0);

        String jsonUrl = getApplication().getString(R.string.json_feed);
        HttpHandler httpHandler = new HttpHandler();
        String jsonString = httpHandler.makeJsonServiceCall(jsonUrl);

        Log.i(TAG, "Response from url: " + jsonString);

        if( jsonString != null) {
            try {
                JSONObject jsonObject = new JSONObject(jsonString);

                // Get JSON array node.
                JSONArray jArray = jsonObject.getJSONArray("book");

                // Looping through all the books.
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject jsonEntry = jArray.getJSONObject(i);

                    String year = jsonEntry.getString("year");
                    String title = jsonEntry.getString("title");
                    String publisher = jsonEntry.getString("publisher");
                    String price = "£" + jsonEntry.getString("price");

                    final Book bookObject = new Book(year, title, publisher, price);

                    //Add the new books to our result array.
                    bookArray.add(bookObject);
                }

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

        }
        return bookArray;
    }

    @Override
    protected void onPostExecute( List<Book> books) {
        super.onPostExecute(books);
        Log.e(TAG, "Populate UI recycler view with json converted data.");
       // bookArray
        bookList.setValue(books);
    }
}

El análisis parece que se interrumpe cuando trato de conseguir el nodo de la matriz.

Los siguientes problemas surgen:

org.json.JSONException: Value "Contents of my json file"

at org.json.JSON.typeMismatch(JSON.java:101)

at org.json.JSONObject.getJSONArray(JSONObject.java:591)

Luego se refiere a una línea 170 que es:

 // Get JSON array node.
 JSONArray jArray = jsonObject.getJSONArray("book");

Podría estar haciendo algo mal con el proceso de análisis?

Christopher Schneider:

Nada mal con su análisis, pero su JSONPath es malo. Mire a su estructura original. El camino real es $.bib.book, por lo que para conseguir que la matriz, lo que necesita hacer

new JSONObject(jsonString).getJSONObject("bib").getJSONArray("book")

Usted puede ser capaz de hacerlo .getJSONArray("bib.book"), pero no estoy seguro de cómo esa clase analiza JSON y si son compatibles caminos anidados.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=385498&siteId=1
Recomendado
Clasificación