我正在尝试使用xmladapter进行一些自定义json解析。但是,我总是得到一个长度为0的字符串传递给unmarshal方法。
以下是一些json示例:
{
"type": "typeA",
"data": [
{
"dataField1": "A",
"dataField2": "AA"
},
{
"dataField1": "B",
"dataField2": "BB"
}
]
}
我试着从两个方面来解决这个问题。因为“type”定义了数据数组中的数据类型,所以我可以使用根xml上的适配器动态创建正确的对象。
或
我把数组中的json放在一个字符串中,以便以后处理。
我一辈子都想不出怎么做选项一。我觉得在这种情况下需要手动解析整个对象。typeadataobject沿线的内容扩展了genericdataobject。
现在,这里是选项2的一个尝试,也是问题的核心,我在适配器中的unmarshal方法中得到了一个零长度的字符串。
这是我的根对象类。
public class TestObject
{
public String type;
@XmlElement (name = "data")
public List<GenericDataObject> data = new ArrayList<GenericDataObject>();
}
这是我的genericdataobject
@XmlJavaTypeAdapter(GenericObjectAdapter.class)
public class GenericDataObject
{
@XmlTransient
public String json;
public GenericDataObject (String v)
{
json = v;
}
}
最后是我的适配器
public class GenericObjectAdapter extends XmlAdapter<String, GenericDataObject>
{
@Override
public GenericDataObject unmarshal (String v) throws Exception
{
return new CAPIGenericDataObject (v);
}
@Override
public String marshal (GenericDataObject v) throws Exception
{
return v.json;
}
}
问题:unmarshal中的字符串v(字符串v)总是一个长度为零的字符串。所以这里没什么可做的。在我看来,它应该传递“{”datafield1“:”a“,”datafield2“:”aa“}”和随后的b数据,当它在数组中迭代第二次调用时。
但是,如果我用“datafield1”和“datafield2”创建了一个合适的对象,并且不使用适配器,那么一切都可以解析。所以我把注解搞砸了,或者我是怎么用数组实现的?
暂无答案!
目前还没有任何答案,快来回答吧!