【问题标题】:.equal in strings from json?.equal 来自 json 的字符串?
【发布时间】:2014-10-25 17:58:38
【问题描述】:

我正在尝试一些代码,我想将我从 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");
        }


    }

【问题讨论】:

标签: java json deserialization


【解决方案1】:

根据 Gson API,您对 'nameObject.get("name")' 的调用将返回 JsonElement。这意味着你应该使用 'getAsString()' 方法而不是 'toString()':

String nameString = nameObject.get("name").getAsString();

'toString()' 方法(通常)是为调试目的而设计的。并且在程序逻辑中应该非常小心地使用。

【讨论】:

    【解决方案2】:

    您需要知道 JsonElement 类中 toString() 的实现是这样的,它将返回包含 "" 的字符串。

    为了更容易理解,请查看以下代码

    JsonObject json = new JsonObject();

    json.addProperty("hello", "tata");

    System.out.println(json.get("hello").toString()); // 打印“tata”

    System.out.println(json.get("hello").getAsString()); // 打印 tata

    所以你的代码在内部比较“sven”和返回不相等的sven

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2018-02-13
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      相关资源
      最近更新 更多