使用jackson-asl生成JSON - 空流

时间:2014-08-12 13:38:39

标签: java json jackson

由于一些限制(不惜一切代价避免更改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为空)。试图手动刷新和关闭流但没有任何变化。任何提示?

1 个答案:

答案 0 :(得分:1)

问题是你没有关闭JsonGenerator:内容将保持缓冲在中间缓冲区中。调用JsonParser.flush()也可以,但还有其他充分的理由可以正确关闭生成器(为了提高性能,可以回收一些基础数据结构)。