Android Studio не может найти массив в строке JSON, даже если он существует - PullRequest
0 голосов
/ 10 июля 2020

У меня есть следующая JSON строка:

 private String jsonString = "{\"response\":{\"status\":\"ok\",\"userTier\":\"developer\",\"total\":12,\"startIndex\":1,\"pageSize\":10,\"currentPage\":1,\"pages\":2,\"results\":[{\"id\":\"technology/apple\",\"type\":\"keyword\",\"sectionId\":\"technology\",\"sectionName\":\"Technology\",\"webTitle\":\"Apple\",\"webUrl\":\"https://www.theguardian.com/technology/apple\",\"apiUrl\":\"https://content.guardianapis.com/technology/apple\",\"references\":[{\"id\":\"reuters-stock-ric/AAPL.O\",\"type\":\"reuters-stock-ric\"}]}]}}";

, и в ней есть массив JSON под названием «результаты» "results":[{"id":"technology/apple","type":"keyword" ...

Я использую следующий код чтобы извлечь массив и затем получить из него данные:

  try {
        // build up a list of News objects with the corresponding data.
        JSONObject jsonRootObject = new JSONObject(newsJSON);

        // Extract the JSONArray  called "results",
        // which represents a list of data for every news article
        JSONArray resultsArray = jsonRootObject.optJSONArray("results");

Однако android Studio выдает следующее сообщение об ошибке:

E/MainActivity: Problem parsing the News JSON results
org.json.JSONException: No value for results
    at org.json.JSONObject.get(JSONObject.java:400)
    at org.json.JSONObject.getJSONArray(JSONObject.java:595)
    at com.example.readjson.MainActivity.extractFeatureFromJson(MainActivity.java:68)
    at com.example.readjson.MainActivity.onCreate(MainActivity.java:41)
    at android.app.Activity.performCreate(Activity.java:7989)
    at android.app.Activity.performCreate(Activity.java:7978)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3316)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3485)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2045)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7478)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)

Ответы [ 3 ]

0 голосов
/ 10 июля 2020

Это из-за управляющих символов в строке \

Проверить преобразование-из-строки-в- json -объект- android У него мало ответив на вашу проблему, выберите тот, который вам больше всего подходит.

0 голосов
/ 10 июля 2020

Вам нужно получить JSONObject с идентификатором response, а затем results внутри него. Так что примерно так:

JSONArray resultsArray = jsonRootObject.optJSONObject("response").optJSONArray("results");
0 голосов
/ 10 июля 2020

Это потому, что в ключе «response» находится массив «results», вам нужно получить от него. Попробуйте это ..

JSONObject jsonRootObject = new JSONObject(jsonString);
JSONObject jsonObjectResponse = jsonRootObject.getJSONObject("response");
JSONArray resultsArray = jsonObjectResponse.getJSONArray("results");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...