Android Gson反序列化抛出JsonParseException:应找到对象:

Android Gson反序列化抛出JsonParseException:应找到对象:,android,gson,json,Android,Gson,Json,我的一个android服务服务器响应得到了以下json响应,我在传递这个响应时遇到了问题,有人能帮我这么做吗,我使用gson传递json响应 谢谢 萨姆 我得到的异常: 11-25 22:18:25.250:W/System.err(1590):com.google.gson.JsonParseException:找到预期对象:2 代码 //执行HTTP Post请求 HttpResponse HttpResponse=httpclient.execute(httpPost); HttpEnti

我的一个android服务服务器响应得到了以下json响应,我在传递这个响应时遇到了问题,有人能帮我这么做吗,我使用gson传递json响应

谢谢

萨姆

我得到的异常:
11-25 22:18:25.250:W/System.err(1590):com.google.gson.JsonParseException:找到预期对象:2
代码
//执行HTTP Post请求
HttpResponse HttpResponse=httpclient.execute(httpPost);
HttpEntity当前状态=httpResponse.getEntity();
if(最近性!=null){
String resp=EntityUtils.toString(最近性);
Log.i(“响应”,resp);
GsonBuilder gsonb=新的GsonBuilder();
Gson-Gson=gsonb.create();
UserSearchServerResponse response=null;
JsonParser=新的JsonParser();
if(parser.parse(resp.isJsonObject()){
resonse=gson.fromJson(resp,UserSearchServerResponse.class);
}else if(parser.parse(resp.isJsonArray()){
类型listType=新类型令牌(){
}.getType();
ArrayList searchResultList=new Gson().fromJson(resp,listType);
Log.i(“搜索响应”、“searchResultList.size()”+searchResultList.size());
resonse=新用户SearchServerResponse();
resonse.setSearchResult(搜索结果列表);
}
返回响应;
}
服务器响应:
[
{
“4ecf08a783ba88c400000004”:{
“类型”:2,
“名称”:“ddd”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4e815bd583ba88f53e000000”:{
“类型”:1,
“名称”:“xxxx”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec3293f83ba88c600000000”:{
“类型”:2,
“名称”:“DDSDSD”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec3dd4c83ba88c200000000”:{
“类型”:2,
“名称”:“ddd”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec4074683ba88d500000001”:{
“类型”:2,
“名称”:“123456”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec40a9e83ba88bf00000000”:{
“类型”:2,
“名称”:“qwerty”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec4192a83ba88c000000002”:{
“类型”:2,
“名称”:“sds”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec419b983ba88c200000001”:{
“类型”:2,
“名称”:“SujeevqWWII”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec4a17483ba88d500000002”:{
“类型”:2,
“名称”:“sujeev VP”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec60e5683ba88c500000000”:{
“类型”:2,
“名称”:“dddd”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
},
{
“4ec60f1e83ba88c900000001”:{
“类型”:2,
“名称”:“dddd”,
“照片”:“default_profile.png”,
“坐标”:[
0,
0
]
}
}
]
让我们看看,您有:

[  -- Arraylist
{   --- First object (Map)
    "4ecf08a783ba88c400000004": --- first Map key
    { -- Start of User value (presumably)
        "type": 2,
        "name": "ddd",
        "photo": "default_profile.png",
        "coordinates": [
            0,
            0
        ]
    } -- end of user
}, -- end of map
您声明为
ArrayList
,我相信您在那里有一个额外的映射,它应该是
List
。但是,你的结构有点不稳定,我觉得这个数组没有必要。我相信你真的只想要一张
地图

让我想想,你有:

[  -- Arraylist
{   --- First object (Map)
    "4ecf08a783ba88c400000004": --- first Map key
    { -- Start of User value (presumably)
        "type": 2,
        "name": "ddd",
        "photo": "default_profile.png",
        "coordinates": [
            0,
            0
        ]
    } -- end of user
}, -- end of map

您声明为
ArrayList
,我相信您在那里有一个额外的映射,它应该是
List
。但是,你的结构有点不稳定,我觉得这个数组没有必要。我相信您真的只需要一个
映射

Java术语中的JSON结构是一个
列表
,其中每个映射只有一个条目

import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonFoo
{
  public static void main(String[] args) throws Exception
  {
    Type listType = new TypeToken<ArrayList<Map<String, User>>>() {}.getType();
    ArrayList<Map<String, User>> searchResultList = new Gson().fromJson(new FileReader("input.json"), listType);
    System.out.println(searchResultList);
  }
}

class User
{
  int type;
  String name;
  String photo;
  int[] coordinates;

  @Override
  public String toString()
  {
    return String.format("User: type=%d, name=%s, photo=%s, coordinates=%s", type, name, photo, Arrays.toString(coordinates));
  }
}
导入java.io.FileReader;
导入java.lang.reflect.Type;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Map;
导入com.google.gson.gson;
导入com.google.gson.reflect.TypeToken;
公共类GsonFoo
{
公共静态void main(字符串[]args)引发异常
{
类型listType=newTypeToken(){}.getType();
ArrayList searchResultList=new Gson().fromJson(new FileReader(“input.json”),listType);
System.out.println(searchResultList);
}
}
类用户
{
int型;
字符串名;
弦乐照片;
int[]坐标;
@凌驾
公共字符串toString()
{
返回String.format(“用户:类型=%d,名称=%s,照片=%s,坐标=%s”,类型,名称,照片,数组。toString(坐标));
}
}

Java术语中的JSON结构是一个
列表,其中每个映射只有一个条目

import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class GsonFoo
{
  public static void main(String[] args) throws Exception
  {
    Type listType = new TypeToken<ArrayList<Map<String, User>>>() {}.getType();
    ArrayList<Map<String, User>> searchResultList = new Gson().fromJson(new FileReader("input.json"), listType);
    System.out.println(searchResultList);
  }
}

class User
{
  int type;
  String name;
  String photo;
  int[] coordinates;

  @Override
  public String toString()
  {
    return String.format("User: type=%d, name=%s, photo=%s, coordinates=%s", type, name, photo, Arrays.toString(coordinates));
  }
}
导入java.io.FileReader;
导入java.lang.reflect.Type;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Map;
导入com.google.gson.gson;
导入com.google.gson.reflect.TypeToken;
公共类GsonFo