如果您不想为数据模型创建 POJO,可以使用 javax.json.json-api 库直接使用 JSON。
查看我的 maven 文件(在代码示例之后),了解我添加到项目中的依赖项列表。
package so;
import java.io.StringReader;
import java.io.StringWriter;
import javax.json.*;
public class SortExample {
public JsonObject sortProductsByPrice(JsonObject order) {
JsonArray products = order.getJsonArray("products");
JsonArray details = order.getJsonArray("details");
JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
products.stream().sorted((product1, product2) -> {
JsonNumber cost1 = product1.asJsonObject().getJsonNumber("cost");
JsonNumber cost2 = product2.asJsonObject().getJsonNumber("cost");
return Double.compare(cost1.doubleValue(), cost2.doubleValue());
}).forEach((value) -> arrayBuilder.add(value));
JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
objectBuilder.add("products", arrayBuilder.build());
objectBuilder.add("details", details);
return objectBuilder.build();
}
public static void main(String[] args) {
String orderString =
"{\"products\": [ {\"Name\": \"Marble\",\"cost\": 47.49 }, { \"Name\": \"Mixer\", \"cost\": 59.99 }, { \"Name\": \"Soap\", \"cost\": 3.99 } ], \"details\" : [ { \"area\" : 1090.098 } ] }";
JsonObject order = Json.createReader(new StringReader(orderString)).readObject();
JsonObject sortedOrder = new SortExample().sortProductsByPrice(order);
StringWriter writer = new StringWriter();
Json.createWriter(writer).writeObject(sortedOrder);
System.out.println(writer.toString());
}
}
打印:
{"products":[{"Name":"Soap","cost":3.99},{"Name":"Marble","cost":47.49},{"Name":"Mixer","cost":59.99}],"details":[{"area":1090.098}]}
我的示例中的main 方法只是从您的示例中构造有效负载。工作在sortProductsByPrice完成。
它只是将产品保留在其JsonValue 表示中,并使用流式 API 对其进行排序,然后将它们放回新的JsonArray,最后使用原始details 和排序的产品构建一个新的JsonObject .
我不熟悉 javax.json 并且找不到漂亮的打印选项。也许有更好的库可用。但这为您提供了您想要做什么的要点。
依赖关系:
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.4</version>
</dependency>