如果不是数组,如何为JSON正确应用循环?

时间:2018-12-05 15:47:05

标签: java json pojo

如何解析以下格式的JSON。我需要应用一个循环来从键'n1','n2','n3'等获取数据。我生成了POJO类,但是由于'n1','n2','n3'等不是数组,我不能使用循环。

Dim OutlookApp As Object, OutlookInvite As Object
Dim addIn As COMAddIn, automationObject As Object
Set OutlookApp = GetObject(class:="Outlook.Application") 
SDM = Sheets("Sheet1").Range("F2").Value
Set OutlookInvite = OutlookApp.CreateItem(1)
With OutlookInvite
    .MeetingStatus = 1
    .Subject = "foo"
    .Body = "bar"
    .Recipients.Add SDM
    .Start = Now()
    .Duration = 30
    .BusyStatus = 2
    .ReminderMinutesBeforeStart = 15
    .ReminderSet = True
    Set addIn = OutlookApp.COMAddIns("WebExOI.Addin")
    Set automationObject = addIn.Object
    automationObject.AddPersonalRoom
    .Display
End With

POJO:

{
  "data": {
    "n1": {
      "bla": "0",
      "bla2": "0",
      "bla3": [
        {
          "zzz1": "0",
          "zzz2": "0",
          "zzz3": [
            "0",
            "0",
            "0"
          ]
        }
      ]
    },
    "n2": {
      "bla": "0",
      "bla2": "0",
      "bla3": [
        {
          "zzz1": "0",
          "zzz2": "0",
          "zzz3": [
            "0",
            "0",
            "0"
          ]
        }
      ]

    },
    "n3": {
      "bla": "0",
      "bla2": "0",
      "bla3": [
        {
          "zzz1": "0",
          "zzz2": "0",
          "zzz3": [
            "0",
            "0",
            "0"
          ]
        }
      ]
    }
  }
}

POJO我自己做了。他说的对吗? Android Studio不会发出错误,但是循环不是数组,因此循环不起作用。出现错误“ Exped BEGIN_ARRAY but was BEGIN_OBJECT”。

1 个答案:

答案 0 :(得分:0)

如果您将Jackson用作JSON解析器,则可以使用@JsonAnySetter批注为不在类中的每个属性调用。这样,您就可以对每个属性执行相同的操作-有效地在它们周围循环。

将json简化为...

{
    "n1": {"a":"one"},
    "n2": {"a":"two"},
    "n3": {"a":"three"}
}

给了一个类Data来将n1,n2和n3的值映射到

public class Data {

    private String a;

    public String getA() {
        return a;
    }
    public void setA(String a) {
        this.a = a;
    }

}

然后您可以像这样使用@JsonAnySetter来填充地图,键将分别为n1,n2,n3,值将是具有a = 1、2和3的Data对象。

public class MyPojo 
{
    Map<String, Data> dataMap = new HashMap<>();

    public List<Data> getDataAsAList () {
        return new ArrayList<Data>(dataMap.values());
    }

    @JsonAnySetter
    public void addData(String fieldName, Data value) {
        dataMap.put(fieldName, value);
    }
}