【发布时间】:2022-01-21 13:36:17
【问题描述】:
得到一个 json 文件,它加载了一些配置数组,如下所示:
configs.json
[
{
"category":"A",
"scoreMargins" : [[12], [9,11], [7,9], [5,6], [3,4]]
},
{
"category":"B",
"scoreMargins" : [[3,4], [5,6], [7,8], [9,10], [11, 12]]
}
]
scoreMargins 不是一种精确的格式,因此它目前被反序列化为一个对象。但范围数(或单个值)始终为 5。
CalculationValues.java
public class StressTestCategoryCalculationValues {
private String category;
private Object scoreMargins;
}
服务:
List<CalculationValues> values = mapper.readValue(CalculationValues.class.getResourceAsStream('configs.json'),
mapper.getTypeFactory().constructCollectionType(List.class, CalculationValues.class));
Optional<CalculationValues> configA = values.stream()
.filter(p -> p.getCategory().equals("A"))
.findFirst();
int sumA = xx;
if (configA.isPresent()) {
// logic
}
我想获取scoreMargins 数组元素中的哪个sumA 属于..
例如:
"scoreMargins" : [[3,4], [5,8], [8,11], [11,12], [12, 13]],
sumA = 7, result ??
Desired result = 2 (3rd element)
最简单的方法是什么?
【问题讨论】:
-
是
configs.json故意"scoreMargins" : [12, [10,11], [7,9], [5,6], [3,4]]还是应该是"scoreMargins" : [[12], [10,11], [7,9], [5,6], [3,4]],如果您始终将其设为数组数组,则反序列化会更容易。 -
似乎
scoreMargins应该是int[][]类型(而不是对象)。然后循环scoreMargins以找到sumaA适合的位置。 -
我也不确定你的结果应该是什么?是否要返回数组、数字、整个 CalculationValues 对象?
-
@IgorFlakiewicz 只是特定元素的数组索引就足够了
标签: java arrays json-deserialization