java - 将 csv 数据字符串转换为 json - Java - Play 框架
问题描述
我正在尝试将 csv 数据字符串转换为 java 中的 json。
这是csv数据
id ,CodeName,BattleRequired,AwakenDescription,HPBarAsset,Rarity,ElementType,BaseStar,BaseLevel,UnlockCurrency,UnlockCost,UpgradeDEFFactor,UpgradeATKFactor,UpgradeHPFactor,MP,AttackId,AwakenId,SkillId,ChargeMechanicId,Role,TotalLevel,EnhanceCurrency,LevelUpCurrency,Star,EnhanceCost,LevelUpCost,Level,BaseHP,BaseAttack,BaseDefense,BaseAttackSpeed,CriticalRate,CriticalMultiplier,CauseStatusEffect,ResistStatusEffect,ShieldDefense,MovementSpeed,AggroRange,AttackRange,EvadeChance,LifeSteal,DamageReflection,AOEEvadeChance,CounterAttackChance,CounterAttackMultiplier,BaseCharge,MaxCharge,ScaleValue
4,Knight,50,,HPBarGreen,Epic,Light,1,1,Knight_Light_Shard,30,"0,4,8,12,17","0,6,13,19,26","0,51,102,153,204",80,16,,"54,55,6",29,"Summoner,Knight",120,Knight_Light_Shard,Gold,1,30,1,300,852,107,69,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,0.8
,,,,,,,,,,,,,,,,,,,,,,,2,50,2,373,877,110,71,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
,,,,,,,,,,,,,,,,,,,,,,,3,125,3,446,902,113,73,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
,,,,,,,,,,,,,,,,,,,,,,,4,240,4,518,927,116,75,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
,,,,,,,,,,,,,,,,,,,,,,,5,425,5,591,952,119,77,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
,,,,,,,,,,,,,,,,,,,,,,,,,6,664,977,122,79,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
,,,,,,,,,,,,,,,,,,,,,,,,,7,737,1002,125,81,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
,,,,,,,,,,,,,,,,,,,,,,,,,8,809,1027,128,83,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
,,,,,,,,,,,,,,,,,,,,,,,,,9,882,1052,131,85,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
,,,,,,,,,,,,,,,,,,,,,,,,,10,955,1077,134,87,2.25,8.50,150.0,15,15,0,8.00,8,1.5,0,0,0,1,0,0.8,0,3,
我想要输出 JSON 格式。
是否有将 CSV(或 XLS)文件转换为 JSON 对象的开源 Java 库?
你有什么建议吗?Tks
解决方案
您可以使用 fasterxml.jackson 库来做到这一点
File input = new File("input.csv");
try {
CsvSchema csv = CsvSchema.emptySchema().withHeader();
CsvMapper csvMapper = new CsvMapper();
MappingIterator<Map<?, ?>> mappingIterator = csvMapper.reader().forType(Map.class).with(csv).readValues(input);
List<Map<?, ?>> list = mappingIterator.readAll();
System.out.println(list);
} catch(Exception e) {
e.printStackTrace();
}
你必须添加 jackson-dataformat-csv 和 jackson-databind JAR 作为依赖项
编辑:如果输入是字符串,您可以传递字符串而不是文件
推荐阅读
- mongodb - 拉出一个子文档并返回它的值
- javascript - 如何在 nextjs 中添加字体 ttf 文件
- google-sheets - 将范围引用到单元格
- ios - Swift 的 Array 对 Collection 的一致性
- asp.net-core - 使用Odata基于EF查询DTO
- html - 浮动元素是否会将其变成“内联块”?
- javascript - 单击需要 2 次单击以运行其他库的功能
- c# - 是否可以从所有属性中获取验证属性,并在存在违规时将其显示给用户?
- reactjs - 在 TypeScript 中从 React.router.dom 添加到 props.location.state 的类型
- python - 在不同场景中将带参数的函数传递给装饰器之间的区别