java - 使用 Jackson 将 hashmap 编码为 XML - 结构错误

标签 java json xml jackson jax-rs

我有一个Hashmap<String, List<Object>>我想和 jackson 一起整理 map 。它与 JSON 完美配合,如下所示:

{
    "entriesByTable": {
        "Karlsruhe": [
            {
                "counts": 126,
                "hashTag": "#Karlsruhe"
            },
            {
                "counts": 26,
                "hashTag": "#jobs"
            },
            {
                "counts": 3,
                "hashTag": "#etka16"
            }, ...

但是当涉及到 XML 时,我的结构如下所示:

<?xml version="1.0"?>
<Database>
  <entriesByTable>
    <Karlsruhe>
      <hashTag>#Karlsruhe</hashTag>
      <counts>127</counts>
    </Karlsruhe>
    <Karlsruhe>
      <hashTag>#jobs</hashTag>
      <counts>27</counts>
    </Karlsruhe>
    <Karlsruhe>
      <hashTag>#etka16</hashTag>
      <counts>3</counts>
    </Karlsruhe> ...

但我想要/需要相同的 Json 结构:

<Database>
 <entriesByTable> (mapname)
  <Karlsruhe>     (key)
   <entries>      (value (list))
    <entry>
     <counts>126</counts>
     <hashTag>#Karlsruhe</hashtag>
    </entry>
   </entries>
  </Karlsruhe>
 </entriesByTable>
</Database>

我的类(class):

@JacksonXmlRootElement
public class Database {

    private static String DATABASE_LOCATION;

    @JsonProperty
    private Map<String, List<DatabankEntry>> entriesByTable = new HashMap<>(); ...

第二类:

@JacksonXmlRootElement
public class DatabankEntry implements Comparable<DatabankEntry> {

    @JsonIgnore
    private String tableName;

    @JacksonXmlProperty
    private String hashTag;
    @JacksonXmlProperty
    private int counts;

如果有人有想法那就太棒了。也许我的注释有误?

最佳答案

好的,我自己解决了这个问题。我创建了一个新类,其中包含条目列表并注释了列表对象。

@NoArgsConstructor
public class DatabaseEntries {

    @JacksonXmlProperty(localName="Entry")
    @JacksonXmlElementWrapper(localName="Entries")
    @JsonProperty
    private List<DatabaseEntry> databaseEntries = new LinkedList<>();

    public int size(){
        return databaseEntries.size();
    }

    @JsonIgnore
    public List<DatabaseEntry> getAllEntries(){
        Collections.sort(databaseEntries);
        return databaseEntries;
    }

    public void add(DatabaseEntry databaseEntry){
        databaseEntries.add(databaseEntry)  ;
        }

}

我的 HashMap 现在看起来像这样 Hashmap<String,Object>

@JsonProperty
@JacksonXmlProperty(localName = "EntriesByTable")
private Map<String, DatabaseEntries> entriesByTable = new HashMap<>();

和我的 XML:

<?xml version="1.0"?>
<Database>
  <EntriesByTable>
    <Karlsruhe>
      <Entries>
        <Entry>
          <HashTag>#Karlsruhe</HashTag>
          <Counts>700</Counts>
        </Entry>
        <Entry>
          <HashTag>#Feuerwehr</HashTag>
          <Counts>114</Counts>
        </Entry>
....

JSON:

{
    "entriesByTable": {
        "Karlsruhe": {
            "databaseEntries": [
                {
                    "counts": 700,
                    "hashTag": "#Karlsruhe"
                },
                {
                    "counts": 114,
                    "hashTag": "#Feuerwehr"
                },

关于java - 使用 Jackson 将 hashmap 编码为 XML - 结构错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961824/

相关文章:

java - 如何从网页中抓取图像?

json - Swift 如何重用我的 JSON HTTP 请求 header

android - 应用程序在低于 6 的 android 版本上崩溃但在 android 6 或 7 以上显示错误 android.view.InflateException :

java - 两个布局的相同 Java 文件 (XML)

java - toString() 方法中的方法与字段名称

java - 在 Spring Security OAuth2 实现中成功设置 cookie

ios - Swift 中的 JSON 复杂数组

ruby-on-rails - Rails 无法将 JSON 识别为响应类型

c# - 将 xml 字符串作为输入传递给 MySQL 存储过程

xml - 重新访问混合字符串值的字母数字排序