【发布时间】:2021-01-03 07:58:27
【问题描述】:
我有一个 JSON 文件,我需要将其展平并从中创建一个 CSV。我能够转换为 CSV(我有一个“用户”包装器),但在“用户”内部还有另一个名为“标识符”的包装器,我也想迭代它们并为它们创建一个字段。
我有一个如下所示的 JSON 文件:
{
"users": [
{
"displayName": "Sharad Dutta",
"givenName": "",
"surname": "",
"extension_user_type": "user",
"identities": [
{
"signInType": "emailAddress",
"issuerAssignedId": "kkr007@gmail.com"
}
],
"extension_timezone": "VET",
"extension_locale": "en-GB",
"extension_tenant": "EG12345"
},
{
"displayName": "Wayne Rooney",
"givenName": "Wayne",
"surname": "Rooney",
"extension_user_type": "user",
"identities": [
{
"signInType": "userName",
"issuerAssignedId": "kkr007"
}
],
"extension_timezone": "VET",
"extension_locale": "en-GB",
"extension_tenant": "EG12345"
}
]
}
我正在尝试将 JSON 转换为 CSV,这就是我能够做到的:
下面是代码:如您所见,我的 JSON 被包装在 "users" 类型的包装器中,在 JSON 中我还有一个包装器 "identities" ,使用我所做的代码,我可以进行迭代,但是 "identites" 以 JSON blob 的形式出现,我想要这样的东西来代替 identites
issuerType issuerAssignedId
bla bla bla bla bla bla
而不是用于标识的 JSON 嵌套块。
public static void main(String[] args) throws JSONException {
String userJsonFile = "C:\\Users\\Administrator\\Desktop\\jsonRes\\json_format_user_data_input_file.json";
try {
userJsonAsString = readFileAsAString(userJsonFile);
} catch (Exception e1) {
e1.printStackTrace();
}
JSONObject output;
try {
output = new JSONObject(userJsonAsString);
JSONArray docs = output.getJSONArray("users");
File file = new File("C:\\Users\\Administrator\\Desktop\\jsonRes\\EmpDetails.csv");
String csv = CDL.toString(docs);
FileUtils.writeStringToFile(file, csv);
System.out.println("Data has been Sucessfully Writeen to " + file);
System.out.println(csv);
} catch (Exception e) {
e.printStackTrace();
}
}
private static String readFileAsAString(String inputJsonFile) throws Exception {
return new String(Files.readAllBytes(Paths.get(inputJsonFile)));
}
【问题讨论】:
-
首先展平您的 JSON - 然后将展平的结构写入您的 CSV:How to deserialize JSON into flat, Map-like structure? 还有更多 answers and approaches here。
-
很多人都使用过第三方库。我正在寻找可以从 java 库中使用的东西。
标签: java json csv export-to-csv