【问题标题】:Convert JSON String to 2D array将 JSON 字符串转换为二维数组
【发布时间】:2021-07-05 08:24:47
【问题描述】:

我有一个这样的二维数组:

"reels": [
    [
      "BL",
      "77",
      "BL",
      "1B",
      "BL",
      "3B",
      "BL",
      "1B",
      "BL",
      "77",
      "BL",
      "2B",
      "BL",
      "1B",
      "BL",
      "LG",
      "BL",
      "1B",
      "BL",
      "3B",
      "BL",
      "2B"
    ],
    [
      "BL",
      "77",
      "BL",
      "1B",
      "BL",
      "3B",
      "BL",
      "1B",
      "BL",
      "77",
      "BL",
      "2B",
      "BL",
      "1B",
      "BL",
      "LG",
      "BL",
      "1B",
      "BL",
      "3B",
      "BL",
      "2B"
    ],
    [
      "BL",
      "77",
      "BL",
      "1B",
      "BL",
      "3B",
      "BL",
      "1B",
      "BL",
      "77",
      "BL",
      "2B",
      "BL",
      "1B",
      "BL",
      "LG",
      "BL",
      "1B",
      "BL",
      "3B",
      "BL",
      "2B"
    ]
  ]

我使用以下方法将其转换为 JSON 字符串:

gson.toJson(reels).toString();

现在的输出是:

[["BL","77","BL","1B","BL","3B","BL","1B","BL","77","BL"," 2B","BL","1B","BL","LG","BL","1B","BL","3B","BL","2B"],["BL"," 77","BL","1B","BL","3B","BL","1B","BL","77","BL","2B","BL","1B" ,"BL","LG","BL","1B","BL","3B","BL","2B"],["BL","77","BL","1B" ,"BL","3B","BL","1B","BL","77","BL","2B","BL","1B","BL","LG"," BL","1B","BL","3B","BL","2B"]]

现在我希望这个字符串回到一个只使用 JAVA 的多维数组,就像它最初一样。我能做什么?

【问题讨论】:

  • 你已经用过 Gson 的toJson() 那么你为什么不寻找相反的操作,也许一些关于如何传递正确类型定义的文档?
  • 抱歉,找不到。谢谢
  • 嗯,首先是Gson.fromJson()...
  • 我们需要在其中提到一个类类型
  • 嗯,这就是“寻找一些关于如何传递正确类型定义的文档”的用武之地。乍一看,Gson.fromJson(yourJsonString, String[][].class) 应该可以工作。

标签: java json string multidimensional-array


【解决方案1】:

定义一个反映您的数据结构的类。

class Data {
    private List<String[]> reels;
}

然后在对Gson.toJson的调用中使用它:

Data data = GSON.fromJson(jsonString, Data.class);

相关问题:

import java.util.List;

import com.google.gson.Gson;

public class Main {

    public static void main(String[] args) {
        String jsonString = "{\"reels\":[[\"BL\",\"77\",\"BL\",\"1B\",\"BL\",\"3B\",\"BL\",\"1B\",\"BL\",\"77\",\"BL\",\"2B\",\"BL\",\"1B\",\"BL\",\"LG\",\"BL\",\"1B\",\"BL\",\"3B\",\"BL\",\"2B\"],[\"BL\",\"77\",\"BL\",\"1B\",\"BL\",\"3B\",\"BL\",\"1B\",\"BL\",\"77\",\"BL\",\"2B\",\"BL\",\"1B\",\"BL\",\"LG\",\"BL\",\"1B\",\"BL\",\"3B\",\"BL\",\"2B\"],[\"BL\",\"77\",\"BL\",\"1B\",\"BL\",\"3B\",\"BL\",\"1B\",\"BL\",\"77\",\"BL\",\"2B\",\"BL\",\"1B\",\"BL\",\"LG\",\"BL\",\"1B\",\"BL\",\"3B\",\"BL\",\"2B\"]]}";
        Gson GSON = new Gson();
        Data data = GSON.fromJson(jsonString, Data.class);
        System.out.println(data);
    }
    
    class Data {
        private List<String[]> reels;
        public String toString() {
            String retval = "[";
            for (String[] str : reels) {
                retval +="[";
                for (String inStr : str) {
                    if (retval.charAt(retval.length()-1)!='[')
                        retval +=",";
                    retval +="\\\""+inStr+"\\\"";
                }
                retval +="]";
            }
            retval +="]";
            return retval;
        }
    }
}

【讨论】:

    【解决方案2】:

    我认为您应该能够通过将 JSON 字符串读取为 JsonObject 然后将 JsonObjectreel 键作为 JsonArray 读取到目标二维数组中来做到这一点:

    Gson gson = new Gson();
    // Read JSON string as JsonObject
    JsonObject jsonObject = gson.fromJson(reels, JsonObject.class);
    // Read reels array key
    JsonArray jsonArray = jsonObject.getAsJsonArray("reels");
    
    // Iterate reels array and assign to result array
    String[][] result = new String[3][22];
    for (int i = 0; i < jsonArray.size(); i++) {
        JsonArray reelJsonArr = jsonArray.get(i).getAsJsonArray();
        for (int j = 0; j < reelJsonArr.size(); j++) {
            result[i][j] = reelJsonArr.get(j).getAsString();
        }
    }
    

    如果您不想手动将 JsonArray 转换为您的 String 数组,您应该提供您自己的关于 JSON 字符串的 POJO,正如 @geocodezip 在他的回答中提到的那样。

    【讨论】:

      猜你喜欢
      • 2015-03-28
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多