在发布之前,我已经搜索并尝试了StackOverflow上的每个示例。似乎什么都没有用,所以希望有人可以了解正在发生的事情。
我有一个以UTF-8格式从WCF服务返回的json。当数据返回时,我按摩数据以删除' \ n' (由BufferedReader引入StringBuilder附加)和反斜杠(如果它们在那里并留下这个字符串:
(from Log.d):
D/WEB: "{\"BattleList\":[{\"LiveID\":1,\"BattleID\":1,\"OvxyzID\":1234,\"ChallengerID\":1,\"OpponentID\":2,\"ChallengerName\":\"Tank1\",\"OpponentName\":\"Tank2\",\"TimeChallenged\":\"12-6-2015\",\"IsActive\":1,\"TimeEnded\":\"0001-01-01T00:00:00\"}]}"
我已经尝试了所有主要的json解析器来使其工作:gson,json-simple,json-lib,minimal-json。所有结果都相同'无法转换为JSONObject'或者'不是有效的数组'或'无效值'等
精确的org.json异常:
org.json.JSONException: Value {"BattleList":[{"LiveID":1,"BattleID":1,"OvxyzID":1234,"ChallengerID":1,"OpponentID":2,"ChallengerName":"Tank1","OpponentName":"Tank2","TimeChallenged":"12-6-2015","IsActive":1,"TimeEnded":"0001-01-01T00:00:00"}]} of type java.lang.String cannot be converted to JSONObject
12-12 02:56:12.138 27304-27304/com.myproject W/System.err:
at org.json.JSON.typeMismatch(JSON.java:111)
尽管Exception是一个typeMismatch我检查过以确保字段名称和它们各自的dataTypes是相同的。
但是,在所有这些情况下,如果我复制字符串并将其放在String变量中,它就可以工作 String json =" {\" BattleList \":[{\" LiveID \":1,\" BattleID \":1, \" OvxyzID \":1234,\" ChallengerID \":1,\" OpponentID \":2,\" ChallengerName \& #34;:\"罐1 \" \" OpponentName \":\" TANK2 \" \" TimeChallenged \&#34 ;:\" 2015年12月6日\" \" IsActive \":1,\" TimeEnded \":\" 0001 -01-01T00:00:00 \"}]}"
org.json能够从变量中创建一个有效的对象,但是将其与我的'结果'进行匹配。变量是相同的。
我已经在网上使用了我的Notepad ++ json插件去了json验证器,我的返回结果是有效的。
使用Gson,我创建了一个自定义反序列化器,我觉得有趣的是我的返回结果JsonElement只获得了' {'并抛出异常。当我使用String变量时,JsonElement获取整个字符串。
以下是我尝试反序列化的不同方法。如果这是太多信息而且不需要,我很抱歉。
//json-lib
//net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(response);
//json-simple
//JSONParser parser = new JSONParser();
//org.json.simple.JSONObject json = (org.json.simple.JSONObject)parser.parse(response);
//org.json.simple.JSONObject obj = (org.json.simple.JSONObject) JSONValue.parse(response);
//JSONArray jsonArray = new JSONArray(response);
//JSONObject json = (JSONObject) new JSONParser().parse(response);
//org.json
//JSONObject jsonObj = null;
//try {
// jsonObj = new JSONObject(json);
//} catch (org.json.JSONException e) {
// e.printStackTrace();
//}
//JSONObject jObj = new JSONObject(response);
//JSONObject jobj = new JSONObject(response);
//JSONArray jarray = jobj.getJSONArray("BattleList");
//Gson
//String json = "{\"BattleList\":[{\"LiveID\":1,\"BattleID\":1,\"OvxyzID\":1234,\"ChallengerID\":1,\"OpponentID\":2,\"ChallengerName\":\"Tank1\",\"OpponentName\":\"Tank2\",\"TimeChallenged\":\"12-6-2015\",\"IsActive\":1,\"TimeEnded\":\"0001-01-01T00:00:00\"}]}";
//Gson gson = new GsonBuilder().registerTypeAdapter(BattleList.class, new BattleListDeserializer()).create();
//Type animalType = new TypeToken<BattleList>() {
//}.getType();
//BattleList bl = gson.fromJson(response, animalType);
//GsonBuilder gsonBuilder = new GsonBuilder();
//gsonBuilder.registerTypeAdapter(BattleList.class, new BattleListDeserializer());
//Gson gson = gsonBuilder.create();
//Gson gson = new Gson();
//JsonParser parser = new JsonParser();
//JsonObject jObject = parser.parse(jsonFormattedString).getAsJsonObject();
//battleList = gson.fromJson(response, BattleList.class);
我的BattleList课程:
public class BattleList {
private List<Battles> activeBattles = new ArrayList<>();
public void addBattle(Battles battle){
activeBattles.add(battle);
}
public Battles getBattle(int indx){
return activeBattles.get(indx);
}
public int getCount(){
return activeBattles.size();
}
}
我的战斗课程:
public class Battles {
@SerializedName("LiveID")
public int LiveID;
@SerializedName("BattleID")
public int BattleID;
@SerializedName("OvxyzID")
public int OvxyzID;
@SerializedName("ChallengerID")
public int ChallengerID;
@SerializedName("OpponentID")
public int OpponentID;
@SerializedName("ChallengerName")
public String ChallengerName;
@SerializedName("OpponentName")
public String OpponentName;
@SerializedName("TimeChallenged")
public String TimeChallenged;
@SerializedName("IsActive")
public int IsActive;
@SerializedName("TimeEnded")
public String TimeEnded;
}
我不确定此处还包括哪些内容,如果需要更多,我会修改问题。
基本上,我做错了什么?应该非常简单但是我已经阻止了一个多星期。
感谢。