Помогите разобрать результаты поиска Yahoo с JSON Не исключение JsonArray - PullRequest
2 голосов
/ 02 февраля 2011

Я прочитал так много постов и до сих пор не могу найти или понять, как обрабатывать набор результатов, который может иметь 1 результат или массив результатов. (Из Yahoo! Search)

Я могу отлично проанализировать результаты, если получено несколько результатов, но при наличии только одного результата поиска я получаю исключение JSONEx: blahblahbalh не является JSONArray.

JSONArray results = resultObject.getJSONArray("Result");

Работает нормально при наличии нескольких результатов, но как я могу заставить встроенный анализатор JSON принять его как результат, когда из запроса Yahoo возвращается только 1 результат?

Этот единственный результат не может быть проанализирован в массив JSON:

{
  "ResultSet": {
    "totalResultsAvailable": "108",
    "totalResultsReturned": "1",
    "firstResultPosition": "1",
    "ResultSetMapUrl": "http:\/\/maps.yahoo.com\/broadband\/?q1=Virginia+Beach%2C+VA+23454-4608tt=mexicantp=1",
    "Result": {
      "id": "12811175",

    }
  }
}

Но это нормально разбирает JSONArray:

    {
  "ResultSet": {
    "totalResultsAvailable": "108",
    "totalResultsReturned": "2",
    "firstResultPosition": "1",
    "ResultSetMapUrl": "http:\/\/maps.yahoo.com\/broadband\/?q1=Virginia+Beach%2C+VA+23454-4608tt=mexicantp=1",
    "Result": [
      {
        "id": "12811175",

      },
      {
        "id": "12814560",
      }
    ]
  }
}

Извините, если я болтаю, но меня сводит с ума то, что я просто не могу понять, как получить JSONArray длиной 1 из первого примера результата.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Это одна из проблем при работе с JSOn.Если есть два объекта, это считается JSONArray, в противном случае он считается JSONObject.

Насколько я знаю, нужно просто предположить, что это может быть либо, и кодировать соответственно.Вы можете обернуть грязные детали в вспомогательную функцию, например:

 JSONArray getArrayOrObject(JSONObject parent, String name) {
    JSONArray results = parent.optJSONArray(name);
    if (results == null) {
      results = new JSONArray();
      JSONObject object = parent.optJSONObject("Result");
      if (object != null) {
        results.put(object);
      }
    }
    return results;
  }
0 голосов
/ 02 февраля 2011

Вы хотите проверить, если totalResultsReturned == 1. если это так, вместо этого следует использовать .getJSONObject ('Result'), а затем создать JSONArray с этим объектом в качестве первого значения (http://www.json.org/javadoc/org/json/JSONArray.html).

.Также обрабатываем случай, когда есть 0 результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...