Java 放心jsonPath返回HashMap而不是LinkedHashMap

Java 放心jsonPath返回HashMap而不是LinkedHashMap,java,json,rest-assured,linkedhashmap,rest-assured-jsonpath,Java,Json,Rest Assured,Linkedhashmap,Rest Assured Jsonpath,这与Java有关 我希望能够更改JsonPath对象在从json响应解析时如何返回自身的默认行为,以便我仍然可以利用它附带的方法,例如getMap()、getList(),理想情况下,我希望所有JsonPath方法都将其映射对象作为LinkedHashMap而不是HashMap返回,或者至少让getMap()方法作为LinkedHashMap返回,这样我就可以保留键顺序 以下响应对象的json键顺序与浏览器的json响应匹配: Response response = given().get(ur

这与Java有关

我希望能够更改JsonPath对象在从json响应解析时如何返回自身的默认行为,以便我仍然可以利用它附带的方法,例如getMap()、getList(),理想情况下,我希望所有JsonPath方法都将其映射对象作为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");
我希望答案在于将配置更改为某种形式,或者在某处重载某个方法,等等。因为我喜欢使用rest-assured库进行所有json解析,但现在需要保留键顺序

除了上面提到的response对象之外,如果我至少能让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");

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

OOC,为什么您关心JSON中的键顺序?在你的应用程序中,
{“foo”:1,“bar”:2}
{“bar”:2,“foo”:1}
之间有语义差异吗?如果是这样,为什么?这是一个很好的问题,因为我正在编写一个测试来获取键的顺序,然后将它们与稍后导出的csv进行匹配,该csv应该遵循与api响应相同的列顺序(但我不想硬编码键顺序,因为它可以根据传递到api调用的内容进行更改).我是REST Assured的创始人,我认为没有办法配置它。但是也许你可以把它作为一个问题添加到问题跟踪器()中,我来看看我能做些什么。OOC,你为什么关心JSON中的键顺序?在你的应用程序中,
{“foo”:1,“bar”:2}
{“bar”:2,“foo”:1}
之间有语义差异吗?如果是这样,为什么?这是一个很好的问题,因为我正在编写一个测试来获取键的顺序,然后将它们与稍后导出的csv进行匹配,该csv应该遵循与api响应相同的列顺序(但我不想硬编码键顺序,因为它可以根据传递到api调用的内容进行更改).我是REST Assured的创始人,我认为没有办法配置它。但也许您可以将其作为问题添加到问题跟踪器()中,我将看看我能做些什么。