这与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 类型来保持顺序,但我不确定如何或在哪里实现它。