使用Java读取Json文件

时间:2015-01-22 23:43:32

标签: java json multidimensional-array

我有一个JSON文件:

  

[[10,5,0,...,1,8],[3,6,3,...,6,3],[15,7,2,...,1,1 ],[8,7,4,...,8,3],   [...],[6,11,0,...,5,1]]

nXm矩阵。 (n和m未知)。

我想在Java上操作(做计算)。我正在考虑用Java读取/输入到2D数组中。我是否使用BufferReader将JSON文件视为与文本文件相同,或者是否有更简单的方法在Java上读取/操作它?我该如何创建未知大小的二维数组呢?

谢谢

2 个答案:

答案 0 :(得分:1)

如果您将JSON作为输入并希望将其转换为Java 2D阵列,则可以使用Jackson library轻松转换JSON输入。 Jackson可以将JSON转换为POJO和POJO转换为JSON,这称为反序列化/序列化。

用于JSON和POJO之间映射的主类是ObjectMapper。要从JSON字符串转换为2D数组,可以使用以下Java代码:

final String json = "[[1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]";

// Create a Jackson mapper
ObjectMapper mapper = new ObjectMapper();

// Map the JSON to a 2D array
final int[][] ints = mapper.readValue(json, int[][].class);

运行杰克逊所需的唯一依赖是:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.0</version> <!-- At the time of writing -->
</dependency>

答案 1 :(得分:1)

您可以使用此库:

http://www.json.org/java/

然后你可以将文件读成String使用的BufferedReader,关闭读者并执行以下操作:

JSONArray ja = new JSONOArray(string);
int[][] result = new int[ja.length()][];
for (int i = 0; i < ja.length(); i++) {
    JSONAarray ja2 = ja.getJSONArray(i);
    result[i] = new int[ja2.length()];
    for (int j = 0; j < ja2.length(); j++) {
        result[i][j]=ja2.getInt(j);
    }
}

我还没有测试过这段代码,你也可能想要添加一些错误检查并提取局部变量,具体取决于你对文件的格式是否正确。这并不假设您的文件包含矩形矩阵。