Java 如何将我的JSON属性之一转换为数组?

Java 如何将我的JSON属性之一转换为数组?,java,android,json,gson,Java,Android,Json,Gson,如何将我的“威胁”转化为阵列 这是我的JSON [ { "SensorType": "Visual", "Latitude": 1.3184418, "Longitude": 103.6282628, "Threat": [ { "ThreatId": 56332, "Timestamp": "2018-05-02T13:15:43.69

如何将我的“威胁”转化为阵列

这是我的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_对象,但在第1行第80列路径$[0]处为BEGIN_数组。威胁 位于com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)

如果我从JSON文件中删除我的“Threat:”后面的[],它工作正常


发生这种情况的原因以及我如何解决它?

您的
威胁
字段定义应为:

    public ThreatTimeDetail[] Threat;

您的json包含数组数据,但您正在映射到单个对象实例,因此出现了错误。

这里的问题是您试图从json转换数组:

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

解决方案是创建一个数组而不是简单的对象:

public ThreatTimeDetail[] Threat = new ThreatTimeDetail[50];
public ThreatTimeDetail[] Threat = new ThreatTimeDetail[50];