Json字符串无法解析或无效JSONObject

时间:2015-12-12 08:35:39

标签: java json gson org.json

在发布之前,我已经搜索并尝试了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;
}

我不确定此处还包括哪些内容,如果需要更多,我会修改问题。

基本上,我做错了什么?应该非常简单但是我已经阻止了一个多星期。

感谢。

0 个答案:

没有答案