由于一些限制(不惜一切代价避免更改pom),我正在尝试使用旧的jackson-core-asl-1.0.0.jar库生成JSON。这是我写的代码:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.junit.Assert;
import org.junit.Test;
public class JacksonTest {
private void mapToJsonAndOutput(OutputStream out, Map<String, String> data) throws IOException {
JsonFactory f = new JsonFactory();
JsonGenerator g = f.createJsonGenerator(out, JsonEncoding.UTF8);
g.writeStartObject();
for (Entry<String, String> e : data.entrySet()) {
g.writeStringField(e.getKey(), e.getValue());
}
g.writeEndObject();
}
@Test
public void test2() throws IOException {
String expectedJson = "{\"type\":\"dog\",\"name\":\"Spike\"}";
Map<String, String> data = new HashMap<String, String>();
data.put("type", "dog");
data.put("name", "Spike");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
mapToJsonAndOutput(baos, data);
String result = new String(baos.toByteArray());
Assert.assertNotNull(result);
Assert.assertTrue(result.length() > 0);
}
}
我想我跟着the doc(即使我需要的东西与他们制作的东西不完全相同),但是最后一个Assert失败(String为空)。试图手动刷新和关闭流但没有任何变化。任何提示?
答案 0 :(得分:1)
问题是你没有关闭JsonGenerator
:内容将保持缓冲在中间缓冲区中。调用JsonParser.flush()
也可以,但还有其他充分的理由可以正确关闭生成器(为了提高性能,可以回收一些基础数据结构)。