当前位置: 首页 > 面试题库 >

GSON:如何从Json获得不区分大小写的元素?

白宏放
2023-03-14
问题内容

JSON对象包含jsonKey传递给方法的内容时,下面显示的代码可以很好地工作。我想知道…是否有办法获取分配给键的不区分大小写表示的值?

例:

public String getOutputEventDescription(JsonElement outputEvent) throws ParserException {
    return retrieveString(outputEvent, DESCRIPTION);
}

无论DESCRIPTION被定义为“ Description”,“ description”还是“ DeScRipTIOn”,它都应该起作用

protected String retrieveString(JsonElement e, String jsonKey) throws ParserException {

JsonElement value = e.getAsJsonObject().get(jsonKey);

if (value == null) {
    throw new ParserException("Key not found: " + jsonKey);
}

if (value.getAsString().trim().isEmpty()) {
    throw new ParserException("Key is empty: " + jsonKey);
}

return e.getAsJsonObject().get(jsonKey).getAsString();
}

问题答案:

不幸的是,当前的实现似乎没有办法做到这一点。如果查看Gson源代码,更具体地说是JsonObject实现,您将看到基础数据结构是链接的哈希映射。get调用仅调用地图上的get,后者依次使用哈希码和键的equals方法查找要查找的对象。

唯一的解决方法是为您的密钥强制执行一些命名约定。最简单的方法是将所有键都强制转换为小写。如果需要混合大小写的键,那么您将面临更多困难,并且需要编写更复杂的算法来转换键,而不是简单地调用jsonKey.toLowerCase()。



 类似资料:
  • 问题内容: 我正在尝试提出一个要求区分大小写的结果的请求。 例如在我的数据库中 该请求是 但我有3行作为结果,我只想要abcdef 我试图找到一个解决方案 但是我有这个错误: 未知归类:’Latin1_General_CS_AS’{“成功”:false,“错误”:“#1273-未知归类:’Latin1_General_CS_AS’”} 谢谢 问题答案: 感谢您的帮助,我找到了不是latin1 ut

  • 问题内容: 默认情况下,单词“ Word”和“ word”不相同。如何使Lucene不区分大小写? 问题答案: 最简单的方法是降低所有可搜索的内容以及查询的大小写。请参阅 文档。您也可以将查询用于不区分大小写的搜索,因为它绕过了。 如果需要,您可以将内容存储在不同的字段中以捕获不同的案例配置。

  • 问题内容: 如何更改strpos以使其不区分大小写。原因是如果的名称是 MadBike ,而搜索字词是 bike ,则该链接不会向我显示。我主要关心的是代码的速度。 问题答案: 您正在寻找 如果您无法使用该功能,则只需先调用两个字符串即可。 编辑 : 如果要查找带有变音符号的子字符串,将无法正常工作。 例如: 返回,但应该返回。

  • 考虑: 我试图在每边只显示100个字符,中间是搜索字符串。 这段代码实际上可以工作,但它是区分大小写的。如何使其不区分大小写?

  • 问题内容: 我有一个Lucene索引,该索引当前区分大小写。我想添加的 选项 有不区分大小写作为后备的。这意味着与案例匹配的结果将获得更大的权重,并且将首先出现。例如,如果结果数限制为10,并且有10个匹配项符合我的情况,那就足够了。如果仅找到7个结果,则可以从不区分大小写的搜索中再添加3个结果。 我的案子实际上更复杂,因为我有不同重量的物品。理想情况下,匹配“错误”的表壳会增加一些重量。不用说,