【问题标题】:Custom serializer JAVA -> JSON (JAXB)自定义序列化器 JAVA -> JSON (JAXB)
【发布时间】:2014-10-12 21:40:50
【问题描述】:

我需要以特定方式序列化 POJO。我以这种方式使用 JAXB:

public void convertToJson(TaskActionData input) {

try {
    JAXBContext context = JAXBContext.newInstance(TaskActionData.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
    marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);

    marshaller.marshal(input, System.out);

} catch (JAXBException e) {
    e.printStackTrace();
}

现在我正在以这种形式将此对象转换为 JSON:

{
"name": "value",
"name": "value",
"name": 
   [    true,
    false,
      false,
      false,
      false,
      false,
      false,
      false,
      false
    ],
"name": {"name": 
[{
    "name": "value",
    "name": [{
        "name": "value",
        "name": "value",
        "name": "value"
    }],
    "name": [{
        "name": "value",
        "name": "value",
        "name": "value",
        "name": "value"
    }],
    "name": "value",
    "name":  [],
    "name": [{
        "name": "value",
        "name": "value",
        "name": "value"
    }]
}]
}}

我需要将每个列表都包装成“项目”标签,就像这样:

{
"name": "value",
"name": "value",
"name": {
    "name": [],
    "items": [
        true,
        false,
        false,
        false,
        false,
        false,
        false,
        false,
        false
    ]
},
"name": {"name": {"items": [{
    "name": "Tvalue",
    "name": {"items": [{
        "name": "value",
        "name": "Bvalue",
        "name": "value"
    }]},
    "name": {"items": [{
        "name": "Tvalue",
        "name": "value",
        "name": "value",
        "name": "value"
    }]},
    "name": "value",
    "name": {"items": []},
    "name": {"items": [{
        "name": "value",
        "name": "value",
        "name": "value"
    }]}
}]}}}

因此需要编写自定义序列化程序。我试图找到一些解决方案,但没有成功

【问题讨论】:

  • 因此需要编写自定义序列化程序。我试图找到一些解决方案,但没有成功 - 您尝试了哪些解决方案?您的自定义序列化程序有什么问题?
  • 嗯,我也没有找到任何例子。也许我将不得不从头开始编写它:(
  • 我用替换和正则表达式解决了它:)

标签: java json serialization jaxb adapter


【解决方案1】:
I created something like that:

public String decorateJSON(String input){
    String output = input.replaceAll("\\[", "{\"items\":[");
    output = output.replaceAll("]", "]}");
    return output;
}

public String undecorateJSON(String input){
    String output = input.replace("{\"items\":", "");
    output = output.replaceAll("]}", "]");
    return output;
}

以后有效果再试试:)

【讨论】:

  • 好的,我不能使用这个解决方案,但是有可能使用除 JAXB 之外的其他框架
猜你喜欢
  • 2010-10-05
  • 1970-01-01
  • 2011-01-13
  • 2011-04-12
  • 2011-02-25
  • 2011-11-09
  • 1970-01-01
  • 2015-02-17
  • 2018-05-06
相关资源
最近更新 更多