【问题标题】:How can i make a json file with java jsonGenerator?如何使用 java jsonGenerator 制作 json 文件?
【发布时间】:2014-03-14 12:24:26
【问题描述】:

我尝试制作这种 json 格式:

[{"x":1392440400000,"title":"!"},{"x":1392465600000,"title":"!"}]

我用 jsonGenerator 试了一下

这是我的代码:

JsonFactory f = new JsonFactory();
StringWriter sw = new StringWriter();
JsonGenerator g = f.createJsonGenerator(sw);

    while {
     g.writeStartObject();
     g.writeNumberField("x",111111);
     g.writeStringField("title","!");
     g.writeEndObject();
    }

    g.close();
    return "["+sw.toString()+"]";   

但我的输出是这样的: [{"x":1392440400000,"title":"!"} {"x":1392465600000,"title":"!"}]

任何人都可以帮助我在对象之间用逗号制作正确的 Json 输出吗?

【问题讨论】:

  • 看起来您没有提供所有代码。我不明白你如何从你展示的内容中获得你的输出。

标签: java json spring-mvc jackson


【解决方案1】:

您可以使用 ObjectMapper 生成输出。 所以这可能是这样的。

ObjectMapper mapper = new ObjectMapper();
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("x", 1392440400000l);
data.put("title", "!");

HashMap<String, Object> data2 = new HashMap<String, Object>();
data2.put("x", 1392440400000l);
data2.put("title", "!");

List out = new ArrayList();
out.add(data);
out.add(data2);

String val = mapper.writeValueAsString(out);

【讨论】:

  • 在一个while循环中?
  • 我怎样才能改变hashmap中的数据:现在o首先获取标题并定义x值。我实际上想先拥有 x。
  • 您不能更改 HashMap 的顺序。如果你真的需要先加上“x”,你必须用 JsonGenerator 来做。因此,在这种情况下,要使您的代码正常工作,您需要添加 g.writeStartArray() ... 和 g.writeEndArray();
  • 其实,如果你想在 JSON 对象中保存属性的顺序,你可以使用 java.util.LinkedHashMap。
【解决方案2】:

我没有使用 jackson,但对于这种特定情况,您需要在循环中使用 g.writeStartObject();g.writeEndObject();。 (因为您实际上是在尝试创建一个对象数组,对吧?)

【讨论】:

  • 是的,这更接近:但现在我得到了这个输出:[{"x":1392440400000,"title":"!"} {"x":1392465600000,"title":"!"} ]widthout 对象之间的逗号
  • 使用 gen.writeStartArray();和 gen.writeEndArray();得到逗号。
猜你喜欢
  • 2020-10-01
  • 2018-11-06
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
相关资源
最近更新 更多