为什么不直接从Sheets API响应中写入(本例摘自Java Sheet API quick-start)
public static void main(String... args) throws IOException, GeneralSecurityException {
// Build a new authorized API client service.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
final String spreadsheetId = "<SHEET_ID>";
final String range = "<SHEET_RANGE>";
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
ValueRange response = service.spreadsheets().values()
.get(spreadsheetId, range)
.execute();
List<List<Object>> values = response.getValues();
if (values == null || values.isEmpty()) {
System.out.println("No data found.");
} else {
/* Create a new writer */
PrintWriter writer = new PrintWriter("data.csv");
for (List<Object> list : values) {
/* Building the string */
StringBuilder str = new StringBuilder();
str.append(list.get(0).toString() + ",");
str.append(list.get(1).toString() + "\n");
writer.write(str.toString());
}
/* Closing the writer */
writer.close();
}
}
在任何情况下,如果正确读取JSON对象,机制都是完全相同的.
Updated
如果您想直接从JSON中读取,可以使用以下示例(使用GSON):
public class SheetResponse {
private String range;
private String majorDimensions;
private List<List<Object>> values;
}
public static void main(String... args) throws IOException, GeneralSecurityException {
// Build a new authorized API client service.
var gson = new Gson();
var reader = new JsonReader(new FileReader("test.json"));
SheetResponse sR = gson.fromJson(reader, SheetResponse.class);
PrintWriter writer = new PrintWriter("data.csv");
for (List<Object> list : sR.values) {
/* Building the string */
StringBuilder str = new StringBuilder();
str.append(list.get(0).toString() + ",");
str.append(list.get(1).toString() + "\n");
writer.write(str.toString());
}
/* Closing the writer */
writer.close();
}
Updated for the general case
public static void main(String... args) throws IOException, GeneralSecurityException {
// Build a new authorized API client service.
var gson = new Gson();
var reader = new JsonReader(new FileReader("test.json"));
SheetResponse sR = gson.fromJson(reader, SheetResponse.class);
PrintWriter writer = new PrintWriter("data.csv");
for (int i = 0; i < sR.values.size(); i++) {
var valueRow = sR.values.get(i);
StringBuilder str = new StringBuilder();
for (int j = 0; j < valueRow.size(); j++) {
if (j == valueRow.size() - 1) {
str.append(valueRow.get(j).toString() + "\n");
} else {
str.append(valueRow.get(j).toString() + ",");
}
}
writer.write(str.toString());
}
/* Closing the writer */
writer.close();
}
Documentation