Android 这不是json数组—web api返回json

Android 这不是json数组—web api返回json,android,json,asp.net-web-api,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"

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);
}
Gson-gsonv=new-Gson();
JsonParser=新的JsonParser();
JsonArray Jarray=(JsonArray)parser.parse(reader.getAsJsonArray();
ArrayList lcs=新的ArrayList();
for(JsonElement对象:Jarray)
{
VehicleEntity v=gsonv.fromJson(对象,VehicleEntity.class);
立法会:加入(v);
日志d(标签“车辆:+v.VehicleID”);
}
My VehicleEntity与json Vehicles部分中的属性匹配

我在这里的路径正确吗?还是web api返回的json有问题

谢谢
Paul

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

听起来像是你在期待这些对象的数组,但看起来并不是这样

如果您将该对象包装在“[”和“]”中,您将拥有一个长度为1的数组,并且您的代码可能可以工作


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

我从未使用过gson,所以可能我错了,但你的第一个点头不是json数组,事实上没有一个根元素是JSONArray查看json有3个工具我只是不希望$ids$value:标记,也许这就是问题所在?我可以让解析器返回车辆/值吗?因为在这之后,对象被[]包围。目前还不能在电脑前测试,但你们认为这样行吗?谢谢,“$values”是一个有效的JSONArray。。。如果您询问如何从顶级JSONObject获取vehicles数组,可能是这样的(未测试):Gson gsonv=new Gson();JsonParser=新的JsonParser();JsonObject topJsonObject=(JsonArray)parser.parse(reader.getAsJsonObject();JsonArray JsonArray=topJsonObject.getJsonObject(“车辆”).getJsonArray($value”);是的,我试过了,但编译器不喜欢:JsonObject topJsonObject=(JsonArray)parser.parse(reader.getAsJsonObject();无法从JsonArray转换为JsonObject。如果我运行以下代码JsonObject userObj=(JsonObject)parser.parse(reader.getAsJsonObject().get(“用户”);如果我运行JsonObject topJsonObject=(JsonObject)parser.parse(reader.getAsJsonObject().get(“车辆”),它会返回一个用户对象;我收到一个不是JSON对象的错误:null。有什么想法吗?让它工作起来了这是我一个愚蠢的错误,基本上我是按照如下方式读取输入流:JsonObject userObj=(JsonObject)parser.parse(reader.getAsJsonObject().get(“user”);但是当我尝试像这样获取“Vehicles”时:JsonObject vehObj=(JsonObject)parser.parse(reader.getAsJsonObject().get(“Vehicles”);我得到endOfInput=true,这导致了“非JSON对象”错误。如果我像这样读它,JsonObject toObject=(JsonObject)parser.parse(reader.getAsJsonObject();然后我可以使用topObj来获取车辆。谢谢你的帮助。