gpt4 book ai didi

java - 写入 CsvMapper 并随后收集全部内容

转载 作者:行者123 更新时间:2023-12-01 18:12:11 30 4
gpt4 key购买 nike

最近一直在尝试使用 JsonGenerator 以流式传输方式生成 JSON。即使您没有将 OutputStream 链接到直接输出来读取内容,如果您愿意,您也可以在最后读取整个内容。

我正在尝试用 Jackson 及其 CSV 库复制完全相同的东西。

ObjectWriter writer = csvMapper.writer(builder.setUseHeader(true).build());
items.forEachRemaining(item ->
{
// ... prepare item for writing its formatted line to 'writer'
}
);

return ???;

所以基本上我想知道的是,有没有办法从 CsvMapper 收集全部内容?一直潜伏在 API 中,找不到任何方法来访问任何流或其他内容。

最佳答案

我将使用根节点元素流并将每个元素映射到 csv 格式的字符串。如下所示:

package example;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import com.google.common.collect.Streams;
import org.junit.Test;

import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;


public class CsvMapperTest {
@Test
public void csvMapper() throws Exception{
String [][] names = {
{"1", "John", "Lennon"},
{"2", "Bob", "Marley"}
};
JsonNode jsonNode = new ObjectMapper().valueToTree(names);

CsvSchema s = CsvSchema.builder()
.addColumn("id", CsvSchema.ColumnType.NUMBER_OR_STRING)
.addColumn("name", CsvSchema.ColumnType.STRING)
.addColumn("lastname", CsvSchema.ColumnType.STRING)
.build();
ObjectWriter csvWriter = new CsvMapper().writer(s);
Stream<String> csvStream = Streams.stream(jsonNode.elements()).map(el -> {
try {
return csvWriter.writeValueAsString(el);
} catch (Exception ex) {
return null;
}
}
);

List<String> lines =csvStream.collect(Collectors.toList());
assertThat(lines, hasSize(2));
String line0 = lines.get(0).trim();
assertThat(lines.get(0).trim(), equalTo("1,John,Lennon"));
}
}

关于java - 写入 CsvMapper 并随后收集全部内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60447580/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com