如何解析以下格式的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”。
答案 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);
}
}