добавить JSONArray в JSONObject - PullRequest
0 голосов
/ 11 мая 2018

Я подаю заявку на отправку уведомлений с помощью OneSignal и должен выполнить запрос POST в формате JSON.

Чтобы отправить уведомление пользователю, я должен использовать аргумент include_player_ids, который должен бытьмассив, потому что можно отправлять нескольким пользователям одно и то же уведомление (в моем случае я отправляю уведомление только одному пользователю).Я использую JSONArray для создания этого массива, но при добавлении его в JSONObject есть дополнительные кавычки для поля include_player_ids.

Что у меня есть:

{
  "headings": {"en":"my_title"},
  "contents": {"en":"my_text"},
  "include_player_ids": "[\"my-player-id\"]",
  "app_id":"my-app-id"
}

Как вы можете видеть, вокруг массива есть некоторая кавычка [].

Я думаю, это то, что делает ошибку ответа от OneSignal: errors":["include_player_ids must be an array"]

Что я хочу:

...
"include_player_ids": ["my-player-id"] 
...

Это странно, потому что добавление JSONObject в JSONObject не делает этого, даже если это очень похоже на поля заголовков / содержимого

Мой код:

import org.json.JSONException;
import org.json.JSONObject;
import org.json.alt.JSONArray;

JSONObject headings = new JSONObject();
JSONObject contents = new JSONObject();
JSONArray player_id = new JSONArray();
JSONObject notification = new JSONObject();
try {
    notification.put("app_id", appId);
    notification.put("include_player_ids", player_id);
    player_id.put(idUser);
    headings.put("en", "my_title");
    contents.put("en", "my_text");
    notification.put("headings", headings);
    notification.put("contents", contents);             

} catch (JSONException e) {
    System.out.println("JSONException :" + e.getMessage());
}

idUser является строкой

Заранее спасибо за любую помощь,

1 Ответ

0 голосов
/ 11 мая 2018

Мне кажется, проблема в том, что вы используете org.json.alt.JSONArray вместо org.json.JSONArray.Я не знаком с этим классом, но подозреваю, что JSONObject.put просто вызывает toString(), а не рассматривает его как существующий массив JSON.Вот короткий, но полный пример того, что не имеет проблему:

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray; // Note the import here

public class Test {
    public static void main(String[] args) throws JSONException {
        JSONArray playerIds = new JSONArray();
        playerIds.put("a");
        playerIds.put("b");
        JSONObject notification = new JSONObject();
        notification.put("include_player_ids", playerIds);
        System.out.println(notification);
      }
}

Вывод:

{"include_player_ids":["a","b"]}
...