Json getString和toString方法之间的区别可能是致命的

时间:2014-06-25 20:27:44

标签: java json

我发帖说这是因为这种微妙的差异给了我半天的痛苦。希望这可以帮助别人。

toString方法将包含双引号,而getString方法则不包含。 我使用的是Oracle最新的Java EE Json软件包。

这是测试代码:

    JsonArray jarr = Json.createArrayBuilder().add("testString1")
        .add("teststr2").add("Another string").build();

    System.out.println("Testing toString method");
    for (JsonValue jv: jarr) {
        System.out.println(jv.toString());
        System.out.println(((JsonString)jv).getString());
    }
    System.out.println("Testing getString method");
    for (int i=0; i<jarr.size(); ++i) {
        System.out.println(jarr.getString(i));
    }

JsonArray jarr = Json.createArrayBuilder().add("testString1") .add("teststr2").add("Another string").build(); System.out.println("Testing toString method"); for (JsonValue jv: jarr) { System.out.println(jv.toString()); System.out.println(((JsonString)jv).getString()); } System.out.println("Testing getString method"); for (int i=0; i<jarr.size(); ++i) { System.out.println(jarr.getString(i)); }

打印出上述代码:

Testing toString method
"testString1"
testString1
"teststr2"
teststr2
"Another string"
Another string
Testing getString method
testString1
teststr2
Another string

我正在使用字符串在地图中查找并且我得到了NULL。看着字符串我最初没注意双引号。我想知道为什么我得到了NULL而关键是'#34;肯定&#34;!

我不确定这是规范的一部分,字符串对象用双引号表示,而不带引号的字符串表示字符串本身。

1 个答案:

答案 0 :(得分:0)

如果不需要这种行为,请不要使用JsonValue.toString():此函数会返回值的 JSON text representation (例如"str";所有JSON字符串值是这样引用的,而不是实际内容(例如str)。

根据文档,

  

[JsonValue.toString]返回此JSON值的JSON文本。


该帖子演示了一个问题&#34; NULL&#34;当在实例上调用时,它与JsonValue.toString()无关。如果存在单独的问题,请提出单独的问题,并确保包含相关的测试用例。