Java 使用jackson asl生成JSON-空流

Java 使用jackson asl生成JSON-空流,java,json,jackson,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; impo

由于一些限制(不惜一切代价避免更改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);
    }
}
import java.io.ByteArrayOutputStream;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Map.Entry;
导入org.codehaus.jackson.jsonecoding;
导入org.codehaus.jackson.json工厂;
导入org.codehaus.jackson.jsonggenerator;
导入org.junit.Assert;
导入org.junit.Test;
公共级杰克逊特测试{
私有void mapToJsonAndOutput(OutputStream out,映射数据)引发IOException{
JsonFactory f=新的JsonFactory();
JsonGenerator g=f.createJsonGenerator(out,jsonencodeding.UTF8);
g、 writeStartObject();
对于(条目e:data.entrySet()){
g、 writeStringField(e.getKey(),e.getValue());
}
g、 writeEndObject();
}
@试验
public void test2()引发IOException{
字符串expectedJson=“{\”类型\“:\”狗\“,\”名称\“:\”刺\“}”;
映射数据=新的HashMap();
数据输入(“类型”、“狗”);
数据输入(“名称”、“峰值”);
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
映射到JSONANDOUTPUT(BAS,数据);
字符串结果=新字符串(baos.toByteArray());
Assert.assertNotNull(结果);
Assert.assertTrue(result.length()>0);
}
}

我认为我遵循了(即使我需要的与他们制作的不完全相同),但最后一个断言失败(字符串为空)。尝试手动刷新并关闭流,但没有任何更改。有什么提示吗?

问题是您没有关闭
JsonGenerator
:内容将保留在中间缓冲区中。调用
JsonParser.flush()
也可以工作,但是有其他很好的理由可以正确关闭生成器(为了性能,一些底层数据结构是循环使用的)