11

我有看起来像这样的 JSON 数据

{"sessionID":7242750700467747000}

该数字是先前从服务器响应中获得的,并在服务器端生成为 Java Long。客户端识别出自己认为这一点sessionID并将其与请求一起发送。问题是当客户端的请求到达服务器时,我必须再次解析该值以键入 Long。我使用 JsonPath,特别是:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path-assert</artifactId>
    <version>0.8.1</version>
    <scope>test</scope>
</dependency>

当我像这样解析 JSON 数据时

长 sessionID = JsonPath.read(json, "$.sessionID");

我得到一个例外:

java.lang.ClassCastException:java.lang.Integer 无法转换为 java.lang.Long

所以看起来这个数字被 JsonPath 解析为整数。这肯定会导致错误的结果,因为 Integer 小于 Long。JsonPath 中是否有任何方法可以将数据解析并返回为 Long?

4

3 回答 3

10

有可能(json-path:2.4.0):

JsonPath.parse(json).read("$.sessionID", Long.class);

查看更多:https ://github.com/json-path/JsonPath#what-is-returned-when

于 2018-08-22T10:48:11.070 回答
7

好的,我设法稍微改变了 JsonPath 提供程序。现在我使用:

<dependency>
    <groupId>com.jayway.restassured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>1.7.2</version>
</dependency>

从那里我可以使用

import com.jayway.restassured.path.json.JsonPath;
// ...
Long sessionID = JsonPath.with(json).getLong("sessionID");

除了开头缺少之外,这个库中的符号是相同的$.,我认为根本没有必要。

于 2013-05-06T08:28:47.743 回答
1

就我所见,API 不提供此选项。

所以我为你看到了两个选择:

  1. 在 JSON 序列化时,将 sessionId 设为字符串。读取一个字符串,然后解析为 Long。
  2. 使用Jackson来读取 JSON。这将允许您阅读 Long。
于 2013-05-05T22:34:27.340 回答