我尝试了一些代码,我希望将我从json抓取的字符串与某些值进行比较。但是,if语句永远不会触发。我已经确认实例的值设置正确,可以打印出来。
//MAKING CLASSES
Collection collection = new ArrayList();
Event ev = new Event();
ev.name = "sven";
ev.source = "src10";
Event2 ev2 = new Event2();
ev2.name = "type";
ev2.data = "somedata";
collection.add(ev);
collection.add(ev2);
//MAKING A BUNCH OF CLASSES TO JSON
Gson gson = new Gson();
String json = gson.toJson(collection);
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(json).getAsJsonArray();
//JSON TO JAVA
for (int i = 0; i < array.size(); i++) {
JsonObject nameObject = array.get(i).getAsJsonObject();
String nameString = nameObject.get("name").toString();
if (nameString.equals("sven")) {
System.out.println("this is sven");
Event event = gson.fromJson(array.get(i), Event.class);
}
else if (nameString.equals("type")) {
System.out.println("this is type");
Event2 event2 = gson.fromJson(array.get(i), Event2.class);
}
else{
System.out.println("nothing");
}
}
答案 0 :(得分:1)
根据Gson API,你打电话给&#39; nameObject.get(&#34; name&#34;)&#39;将返回JsonElement。这意味着你应该使用&#39; getAsString()&#39;方法而不是&#39; toString()&#39;:
String nameString = nameObject.get("name").getAsString();
&#39;的toString()&#39;方法被设计(通常)用于调试目的。并且应该在程序逻辑中非常小心地使用。
答案 1 :(得分:0)
你需要知道JsonElement类中toString()的实现是这样的,它将返回包含“”的字符串。
为了更容易理解,请查看以下代码
JsonObject json = new JsonObject();
json.addProperty(“你好”,“tata”);
的System.out.println(json.get( “你好”)的toString()); //打印“tata”
的System.out.println(json.get( “你好”)符getAsString()); //打印tata
所以内部你的代码比较“sven”和sven将返回不相等的