使用Jackson将复杂的JSON转换为单级POJO

时间:2015-06-29 14:04:51

标签: java json jackson

让我们假设你有以下JSON:

QMutex mutex;
void writeXML(QModelIndex & index)
{
    QMutexLocker lock(&mutex);
    qDebug() << index.data();
}
//...
{
    //somewhere

    //get list of indexes
    QModelIndexList list = ui->tableView->selectionModel()->selectedIndexes();
    QFutureWatcher<void> futureWatcher;
    //apply writeXML to each index
    futureWatcher.setFuture(QtConcurrent::map(list, writeXML));

    futureWatcher.waitForFinished();
}

可以转为简单的Java对象吗?

{
  "prop0": "value0",
  "level1" : {
      "prop1": "value1"
      "prop2": "value2"
   },
   ....
}

我不想创建一个中间类来包装&#34; level1&#34;。

我想到的是以这种方式映射我的课程:

class Pojo {
  private String prop0;
  private String prop1;
  private String prop2;
}

但不幸的是它不起作用。反问题 - 将复杂的Java对象转换为普通的JSON可以使用class Pojo { private String prop0; @JsonProperty("level1.prop1") private String prop1; @JsonProperty("level1.prop2") private String prop2; } 注释简单地解决。

您能为我的问题建议任何可行的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您需要编写自定义反序列化程序,或添加可以转换结构的setter。对于后者你可以做类似

的事情
...
public void setLevel1(Map<String,String> values) { // or JsonNode
   prop1 = values.get("prop1");
   // and so forth; if names are regular, can use looping
}