Java 使用jackson asl生成JSON-空流
由于一些限制(不惜一切代价避免更改pom),我尝试使用旧的jackson-core-asl-1.0.0.jar库生成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
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()
也可以工作,但是有其他很好的理由可以正确关闭生成器(为了性能,一些底层数据结构是循环使用的)