- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用 Jackson Json Mapper 在我的服务器上解析查询。
例如,我正在等待适合类 My_class
的查询:
class My_class {
String a;
String b;
}
我以这种方式反序列化查询:
public <T> T Deserialize(String json, Class<T> type) throws DeserializationException {
if (json == null || type == null) {
throw new IllegalArgumentException();
}
try {
return objectMapper.readValue(json, type);
} catch (JsonParseException e) {
throw new DeserializationException(e);
} catch (org.codehaus.jackson.map.JsonMappingException e) {
throw new DeserializationException(e);
} catch (IOException e) {
throw new DeserializationException(e);
}
}
这里有两个示例查询:
{"a":"test"}
{"a":"test", "b":null}
问题是我想知道什么时候用户向我发送了仅包含字段 a
的查询以及何时发送了字段 b
设置为 的查询空
。在这两种情况下,映射器都将字段 b
标记为 null
。
执行此操作的更好方法是什么(并避免编写我自己的反序列化器)?
最佳答案
您可以使用方法isNull()
检查 JsonNode
是否是一个 null
文字。
boolean isNull()
Method that can be used to check if this node was created from JSON literal null value.
还有isMissingNode()
, 这似乎有类似的目的。如果该节点实际上不存在于 JSON 文档中,它应该返回 true。这种方法很有用,例如如果您想为未明确设置的属性使用默认值。
boolean isMissingNode()
Method that returns true for "virtual" nodes which represent missing entries constructed by path accessor methods when there is no actual node matching given criteria.
在我看来,您应该避免构建依赖于 null
和 missing 节点之间差异的东西。您实际上是在向反序列化的 JSON 添加某种额外的数据类型:大多数 JSON API 在这两种情况下都返回 null
,而现在您有 null literal 和 缺少节点,这不是常见的做法。这很令人困惑,并且可能会导致您的 API 出现问题,因为客户端需要做额外的工作来配置其序列化程序以区分这两种状态。可能并非所有 JSON 库都支持它。
关于java - jackson 杰森映射器 : no field or empty field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18828362/
我正在尝试在 C# 中使用 json 网络解析一个。我正在使用 json .net 但它显示以下异常 Error reading JArray from JsonReader. Current Jso
我从 REST 请求的 json 有效负载中获取以下内容。 { "version": "1.1", "date": "2017-01-06", "count": "130",
我有这样的 json 文件 [ { "topic": "Example1", "ref": { "1": "Example Topic",
这个问题已经有答案了: How to use Jackson to deserialise an array of objects (10 个回答) 已关闭 9 年前。 如果我有简单的 json {
我正在使用 JDBC 将我的 jython 连接到一组异构数据库。使用游标我得到列表形式的行,和游标还知道元数据 (cursor.description)。 通常您会得到一行作为查询结果的列表: pr
我正在选择一个最佳数据文件/源/数据库来存储最初来自电子表格的矩阵。当前的电子表格矩阵如下所示: A1 A2 A3 A4 B1 1 2 3 4 B2 3 2 3 4 B3 2
我有一个如下所示的列表: wsadmin>print jvmLines ['', 'Stats name=jvmRuntimeModule, type=jvmRuntimeModule#', '{',
我是一名优秀的程序员,十分优秀!