java JSON csv 在同一列
时间: 2025-06-29 10:09:55 浏览: 8
### 解析和生成含JSON对象的CSV文件
在Java中处理包含JSON对象的CSV文件可以通过组合使用`OpenCSV`库和其他JSON处理工具(如Jackson或Gson)。对于解析含有JSON字符串的CSV文件,可以先通过`OpenCSV`读取每一行的数据,再针对特定列中的JSON字符串利用相应的JSON库进行反序列化。同样,在生成这样的CSV文件时,则需将JSON对象转换成字符串并作为一列的内容写入。
#### 使用OpenCSV与Jackson实现解析
为了从CSV文件中读取出带有JSON字段的一行记录,并将其转化为对应的实体类实例:
```java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.opencsv.bean.CsvToBeanBuilder;
import java.io.FileReader;
import java.util.List;
class MyData {
private String id;
private transient Object jsonData; // JSON数据映射到此属性
public void setJsonString(String jsonString) throws Exception{
ObjectMapper mapper = new ObjectMapper();
this.jsonData = mapper.readValue(jsonString, Object.class);
}
@Override
public String toString(){
return "MyData{" +
"id='" + id + '\'' +
", jsonData=" + jsonData +
'}';
}
// getters and setters...
}
List<MyData> beanList = new CsvToBeanBuilder(new FileReader("data.csv"))
.withType(MyData.class)
.build()
.parse();
for (var item : beanList){
System.out.println(item);
}
```
上述代码片段展示了如何定义一个包含JSON数据成员的POJO类[^2],并通过自定义setter方法完成对JSON字符串向Object类型的转换[^1]。
#### 生成带JSON对象的CSV文件
当需要创建一个新的CSV文件并将某些复杂结构的对象以JSON形式存储在一列内时,可按照如下方式操作:
```java
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.util.Arrays;
import java.util.Map;
public class Main {
static class RecordWithJsonObject {
private final int id;
private final Map<String,Object> properties;
public RecordWithJsonObject(int id, Map<String,Object> properties) {
this.id = id;
this.properties = properties;
}
public int getId() {return id;}
public String getPropertiesAsJson() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(properties);
}
}
public static void main(String[] args)throws Exception {
List<RecordWithJsonObject> records = Arrays.asList(
new RecordWithJsonObject(1,Map.of("name","Alice")),
new RecordWithJsonObject(2,Map.of("age",30))
);
try(CSVWriter writer = new CSVWriter(new FileWriter("output.csv"))) {
for(var record:records){
writer.writeNext(new String[]{
Integer.toString(record.getId()),
record.getPropertiesAsJson()});
}
}
}
}
```
这段程序说明了怎样构建一个持有JSON表示属性的记录列表,并最终把这些记录逐条写出至CSV文档中去[^3]。
阅读全文
相关推荐

















