来自json的字符串中的.equal?

时间:2014-10-25 17:58:38

标签: java json deserialization

我尝试了一些代码,我希望将我从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");
        }


    }

2 个答案:

答案 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将返回不相等的