将 double 值的 JSONArray 转换为二维双精度数组
Convert JSONArray of double value to a 2 dimensional double array
假设我有一些 JSONArray 值,如下所示
JSONArray arr1 = new JSONArray ();
arr1.put(46.974004);
arr1.put(-86.33614);
JSONArray arr2 = new JSONArray ();
arr2.put(39.135086);
arr2.put(26.363614);
JSONArray allArray = new JSONArray ();
allArray.put(arr1);
allArray.put(arr2);
这是将 allArray
转换为二维双精度数组的最短方法,因此输出将与此相同
double[][] doubles = new double[]{
new double[]{46.974004, -86.33614},
new double[]{39.135086, 26.363614}
};
如果假设所有 'sub-arrays' 都来自相同的长度,则可以按如下方式进行基本迭代:
double[][] newAllArray = new double[allArray.length()][allArray.getJSONArray(0).length()];
for (int i = 0; i < allArray.length(); i++) {
for (int j = 0; j < allArray.getJSONArray(i).length(); j++) {
double originalValue = allArray.getJSONArray(i).getDouble(j);
newAllArray[i][j] = originalValue;
}
}
我假设您的 json 数组具有固定大小,因此我定义了长度为 arr
的数组大小。
double[][] d = new double[arr.length()][];
for (int i = 0; i < arr.length(); i++) {
d[i] = new double[arr.getJSONArray(i).length()];
for (int j = 0; j < arr.getJSONArray(i).length(); j++) {
d[i][j] = arr.getJSONArray(i).getDouble(j);
}
}
如果可以的话,您可以考虑使用 Jackson objectMapper 以获得更优雅的解决方案:
double[][] result = objectMapper.readValue(allArray.toString(), double[][].class);
使用流:
double[][] array = IntStream.range(0, allArray.length()).
mapToObj(allArray::getJSONArray).
map(jsonArray-> IntStream.range(0, jsonArray.length()).mapToDouble(jsonArray::getDouble).toArray()).
toArray(double[][]::new);
假设我有一些 JSONArray 值,如下所示
JSONArray arr1 = new JSONArray ();
arr1.put(46.974004);
arr1.put(-86.33614);
JSONArray arr2 = new JSONArray ();
arr2.put(39.135086);
arr2.put(26.363614);
JSONArray allArray = new JSONArray ();
allArray.put(arr1);
allArray.put(arr2);
这是将 allArray
转换为二维双精度数组的最短方法,因此输出将与此相同
double[][] doubles = new double[]{
new double[]{46.974004, -86.33614},
new double[]{39.135086, 26.363614}
};
如果假设所有 'sub-arrays' 都来自相同的长度,则可以按如下方式进行基本迭代:
double[][] newAllArray = new double[allArray.length()][allArray.getJSONArray(0).length()];
for (int i = 0; i < allArray.length(); i++) {
for (int j = 0; j < allArray.getJSONArray(i).length(); j++) {
double originalValue = allArray.getJSONArray(i).getDouble(j);
newAllArray[i][j] = originalValue;
}
}
我假设您的 json 数组具有固定大小,因此我定义了长度为 arr
的数组大小。
double[][] d = new double[arr.length()][];
for (int i = 0; i < arr.length(); i++) {
d[i] = new double[arr.getJSONArray(i).length()];
for (int j = 0; j < arr.getJSONArray(i).length(); j++) {
d[i][j] = arr.getJSONArray(i).getDouble(j);
}
}
如果可以的话,您可以考虑使用 Jackson objectMapper 以获得更优雅的解决方案:
double[][] result = objectMapper.readValue(allArray.toString(), double[][].class);
使用流:
double[][] array = IntStream.range(0, allArray.length()).
mapToObj(allArray::getJSONArray).
map(jsonArray-> IntStream.range(0, jsonArray.length()).mapToDouble(jsonArray::getDouble).toArray()).
toArray(double[][]::new);