这不是一个json数组 - 由web api返回的json

时间:2013-12-13 15:24:56

标签: android json asp.net-web-api

我有web api返回的以下json但是在尝试解析时遇到以下错误:这不是json数组。

{
"$id": "1",
"updateTime": "2013-12-10T12:28:26.6533786+00:00",
"user": {
    "$id": "2",
    "CompanyID": 1,
    "username": "test",
    "Firstname": "test",
    "Lastname": "ing"
},
"Vehicles": {
    "$id": "3",
    "$values": [
        {
            "$id": "4",
            "VehicleID": 1,
            "CompanyID": 1,
            "VehicleReg": "123",
            "VehicleTypeID": 1,
            "VehicleDescription": ""
        },
        {
            "$id": "5",
            "VehicleID": 4,
            "CompanyID": 1,
            "VehicleReg": "456",
            "VehicleTypeID": 2,
            "VehicleDescription": ""
        },
        {
            "$id": "6",
            "VehicleID": 7,
            "CompanyID": 1,
            "VehicleReg": "789",
            "VehicleTypeID": 3,
            "VehicleDescription": ""
        }
    ]
},
"VehicleTypes": {
    "$id": "7",
    "$values": [
        {
            "$id": "8",
            "VehicleTypeID": 1,
            "VehicleType": "First Test Type",
            "CompanyID": 1
        },
        {
            "$id": "9",
            "VehicleTypeID": 2,
            "VehicleType": "Second Test Type",
            "CompanyID": 1
        },
        {
            "$id": "10",
            "VehicleTypeID": 3,
            "VehicleType": "Third Test Type",
            "CompanyID": 1
        }
    ]
},
"Questions": {
    "$id": "11",
    "$values": [
        {
            "$id": "12",
            "QuestionID": 1,
            "SectionID": 1,
            "CompanyID": 1,
            "Question": "Question 1"
        },
        {
            "$id": "13",
            "QuestionID": 2,
            "SectionID": 1,
            "CompanyID": 1,
            "Question": "Question 2"
        },
        {
            "$id": "14",
            "QuestionID": 3,
            "SectionID": 1,
            "CompanyID": 1,
            "Question": "Question 3"
        }
    ]
},
"QuestionSections": {
    "$id": "15",
    "$values": [
        {
            "$id": "16",
            "SectionID": 1,
            "CompanyID": 1,
            "SectionName": "Section 1"
        }
    ]
}

}

我已经通过解析器,它确实说它是有效的json。

我正试图像这样解析json中的车辆:

Gson gsonv = new Gson();
JsonParser parser = new JsonParser();               
JsonArray Jarray = (JsonArray)parser.parse(reader).getAsJsonArray();
ArrayList<VehicleEntity> lcs = new ArrayList<VehicleEntity>();
for(JsonElement obj : Jarray )
{
VehicleEntity v = gsonv.fromJson( obj , VehicleEntity.class);
lcs.add(v);
Log.d(TAG, "Vehicles: " + v.VehicleID);
}

我的VehicleEntity匹配json Vehicles部分中的属性。

我是在正确的道路上,还是网络api返回的json有问题?

由于 保罗

1 个答案:

答案 0 :(得分:1)

顶级JSON是一个JSONObject(由{}包围,带有键)不是JSONArray(由[]包围,基本上是一个列表)。

听起来你正在期待这些对象的数组,但它看起来并不像你得到的那样。

如果你将该对象包装在'['和']'中,你将拥有一个长度为1的数组,也许你的代码可以正常工作。

如果只有1个元素,有时服务器设置会发送单个Object而不是JSONArray。也许是这样的?如果您执行返回多个结果的服务器查询,该怎么办?那你的代码有用吗?