簡體   English   中英

將雙精度值的 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}
};

如果您假設所有“子數組”都來自相同的長度,則可以按如下方式進行基本迭代:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM