私はこのようなcsvを持っています
givenName,familyNames,formattedName,middleName,honorificPrefix,honorificSuffix,Department.displayName,UserType.shortName,Address.address1,Address.address2,Email.type,Email.value
Jim,jackson,jimJackson,none,mr,none,Product,jack,Houston,USA,home,jim@gmail.com
null,jackson,null,null,null,null,null,null,Dallas,USA,work,jackson@workmail.com
null,null,null,null,null,null,null,null,null,null,office,jackie@office.com
john,lasher,johnLasher,none,mr,none,Operations,lash,Austin,USA,home,lasher@gmail.com
ここで、このすべてのデータをヘッダー行にバインドして json に変換したいと思います。また、それらが複数値の複数の行である場合は、単一の JSON に変換する必要があるため、上記のデータは次のような 2 つの JSON ドキュメントを生成する必要があります。これ
{
"UserType": [
{
"shortName": "jack"
}
],
"middleName": "none",
"familyNames": "jackson",
"Email": [
{
"value": "jim@gmail.com",
"type": "home"
},
{
"value": "jackson@workmail.com",
"type": "work"
},
{
"value": "jackie@office.com",
"type": "office"
}
],
"Address": [
{
"address1": "Houston",
"address2": "USA"
},
{
"address1": "Dallas",
"address2": "USA"
}
],
"honorificPrefix": "mr",
"formattedName": "jimJackson",
"givenName": "Jim",
"Department": [
{
"displayName": "Product"
}
],
"honorificSuffix": "none"
}
{
"UserType": [
{
"shortName": "lash"
}
],
"middleName": "none",
"familyNames": "lasher",
"Email": [
{
"value": "lasher@gmail.com",
"type": "home"
}
],
"Address": [
{
"address1": "Austin",
"address2": "USA"
}
],
"honorificPrefix": "mr",
"formattedName": "johnLasher",
"givenName": "john",
"Department": [
{
"displayName": "Operations"
}
],
"honorificSuffix": "none"
}
私はcsvを読み取るためにjcsvを使用しています.
CSVReader<String[]> csvPersonReader = CSVReaderBuilder.newDefaultReader(new FileReader("addresses.csv"));
List<String[]> persons = csvPersonReader.readAll();
JSONArray finalArray = new JSONArray();
String temp1 = null;
String temp2 = null;
String duplicateField = "familyNames";
String tempStored = null;
ArrayList<String> multiValueAttributes = new ArrayList<String>();
int c = 0;
String delimiter = "\\.";
for (int j = 1; j < persons.size(); j++) {
for (int i = 0; i < persons.get(j).length; i++) {
StringTokenizer headerValues = new StringTokenizer(persons.get(0)[i]);
StringTokenizer bindingValues = new StringTokenizer(persons.get(j)[i]);
JSONObject hasher = new JSONObject();
ArrayList<String> EntitiesWithMultipleAttributes = new ArrayList<String>();
JSONObject multiValueJSON = new JSONObject();
int counter = 0;
int finalValue = 0;
int abc = 0;
while (headerValues.hasMoreTokens() && bindingValues.hasMoreTokens()) {
temp1 = headerValues.nextToken(",");
temp2 = bindingValues.nextToken(",");
if (temp1.equals(duplicateField) && multiValueAttributes.contains(temp2)) {
counter++;
} else if (temp1.equals(duplicateField) && !multiValueAttributes.contains(temp2)) {
multiValueAttributes.add(c, temp2);
c++;
tempStored = temp2;
}
if (temp1.contains(".")) {
JSONArray complexEntity = new JSONArray();
String[] entities = temp1.split(delimiter);
} else if (EntitiesWithMultipleAttributes.contains(entities[0])) {
hasher.getJSONArray(entities[0]).getJSONObject(0).put(entities[1], temp2);
} else {
EntitiesWithMultipleAttributes.add(entities[0]);
JSONObject multiValueJSONFirst = new JSONObject();
multiValueJSONFirst.put(entities[1], temp2);
complexEntity.put(multiValueJSONFirst);
hasher.put(entities[0], complexEntity);
}
} else {
hasher.put(temp1, temp2);
}
}
finalArray.put(hasher);
}
}
私は POJO を持っておらず、作成することもできないため、Beans を使用することはできません。