1

这与Java有关。

我希望能够更改从 json 响应解析时 JsonPath 对象如何返回自身的默认行为,以便我仍然可以利用它附带的方法,例如 getMap()、getList() 等。理想情况下,我会像所有 JsonPath 方法一样,将其 Map 对象作为 LinkedHashMap 而不是 HashMap 返回,或者至少让 getMap() 方法作为 LinkedHashMap 返回,这样我就可以保留键顺序。

以下响应对象的 json 键顺序与浏览器的 json 响应匹配:

Response response = given().get(urlQuery).then().extract().response();

但是,当您尝试通过 jsonPath() 从响应中获取对象或值时,由于 JsonPath 方法在幕后利用 HashMap 而不是 LinkedHashMap (例如代码片段),因此 json 键排序全部搞砸了下面是:

Map map = response.jsonPath().getMap("path.to.a.map");

我希望答案在于将配置更改为某些内容,或在某处重载方法等,因为我喜欢使用放心的库进行所有 json 解析,除非我现在需要保留键顺序。

除了上面提到的响应对象之外,如果我至少可以让 JsonPath 方法以正确的顺序返回 json,我会很满意,如下面的代码示例所示:

import com.jayway.restassured.path.json.JsonPath;

String json = "{\"fields\":{\"field1\":1,\"field2\":2,\"field3\":3,\"field4\":\"4\"}}";

// The value of the JsonPath object stays in the correct order: {"fields":{"field1":1,"field2":2,"field3":3,"field4":"4"}}
JsonPath jsonpath = new JsonPath(json);

// When using any of the JsonPath methods the order is messed up and returns: "{field4=4, field3=3, field2=2, field1=1}"
Object map = jsonpath.getMap("fields");

我想以某种方式让 JsonPath 方法通过利用 LinkedHashMap 类型来保持顺序,但我不确定如何或在哪里实现它。

4

0 回答 0