Как преобразовать одно из моих свойств JSON в массив? - PullRequest
0 голосов
/ 04 мая 2018

Как конвертировать мою "угрозу" в массив?

Это мой JSON

[
    {
        "SensorType": "Visual",
        "Latitude": 1.3184418,
        "Longitude": 103.6282628,
        "Threat": [
            {
                "ThreatId": 56332,
                "Timestamp": "2018-05-02T13:15:43.6964862+08:00",
                "Latitude": 0,
                "Longitude": 0,
                "Bearing": 22.0,
                "FOV": 10.0,
                "ObjectId": "5320079"
            }
        ]
    }
]

Это мой файл Java

public class Threat {
    //public boolean IsNewDetection;
    public String SystemId;
    public String SystemName;
    public String SensorType;
    public Double Latitude;
    public Double Longitude;
    public ThreatTimeDetail Threat = new ThreatTimeDetail();

    public class ThreatTimeDetail {
        public Integer ThreatId;
        public Date Timestamp;
        public Double Latitude;
        public Double Longitude;
        public Float Bearing;
        public Float FOV;
        public String ObjectId;
    }
    public transient Date Timestamp;
    public transient Date mTimestamp;
    public transient boolean isUpdated;
}

Это мой запрос об угрозе файла Java

bufferedReader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
if (bufferedReader != null) {

    //not working
    Threat[] Sensorarray = new GsonBuilder()
                                .create()
                                .fromJson(bufferedReader, Threat[].class);
}

Состояние ошибки: вызвано: java.lang.IllegalStateException: ожидаемый BEGIN_OBJECT, но был BEGIN_ARRAY в строке 1, столбец 80, путь $ [0]. на com.google.gson.stream.JsonReader.beginObject (JsonReader.java:385)

Если я удаляю [] после своей «Угрозы:» из ФАЙЛА JSON, она работает нормально.

Почему это происходит и как я могу это решить?

Ответы [ 2 ]

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

Проблема в том, что вы пытаетесь конвертировать массив из Json:

[
  {
    ... ,
    "Threat": [ <<<<<<<<<<<<<
      {
        "ThreatId": 56332,
        "Timestamp": "2018-05-02T13:15:43.6964862+08:00",
        ... ,
        "ObjectId": "5320079"
      }
    ] <<<<<<<<<<<<<<
  }
]

В объект:

public ThreatTimeDetail Threat = new ThreatTimeDetail();

Решение состоит в том, чтобы создать массив вместо простого объекта:

public ThreatTimeDetail[] Threat = new ThreatTimeDetail[50];
0 голосов
/ 04 мая 2018

Ваше Threat определение поля должно быть:

    public ThreatTimeDetail[] Threat;

Ваш json содержит данные массива, но вы отображаете один экземпляр объекта, поэтому возникла ошибка.

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