【发布时间】:2018-01-09 12:32:08
【问题描述】:
尝试使用几个在线工具将 json 对象转换为 java pojo 以使用 GSON 填充数据,但出现错误:
这是一个 json 对象的示例:
{
"ENCUESTA": {
"ALOJAMIENTO": {
"RESIDENCIA": [
{
"ID_PROVINCIA_ISLA": "ES511",
"MOVIMIENTO": [
{
"SALIDAS": 0,
"PERNOCTACIONES": 3,
"N_DIA": "08",
"ENTRADAS": 3
}
]
},
{
"MOVIMIENTO": [
{
"SALIDAS": 0,
"PERNOCTACIONES": 3,
"N_DIA": "06",
"ENTRADAS": 3
}
],
"ID_PAIS": "CHN"
}
]
},
"CABECERA": {
"FECHA_REFERENCIA": {
"MES": 11,
"ANYO": 2017
},
"NOMBRE_ESTABLECIMIENTO": "UNKNOWN"
}
}
}
RESIDENCIA 可以有两个选项(在 xsd 中是 xs:choice),所以你可以有:
MOVIMIENTO, ID_PROVINCIA_ISLA
或
MOVIMIENTO, ID_PAIS
当我生成 POJO 时,我只得到其中一个,具体取决于对象中的第一个:
public class RESIDENCIA
{
private MOVIMIENTO[] MOVIMIENTO;
private String ID_PROVINCIA_ISLA;
}
ID_PAIS 不存在
public class MOVIMIENTO
{
private String PERNOCTACIONES;
private String N_DIA;
private String SALIDAS;
private String ENTRADAS;
}
我最初的解决方案只是添加 ID_PAIS,但 GSON 抱怨.....
public class RESIDENCIA {
private MOVIMIENTO[] MOVIMIENTO;
private String ID_PAIS;
private String ID_PROVINCIA_ISLA;
}
错误: java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在路径 $.ENCUESTA.ALOJAMIENTO.RESIDENCIA[16].MOVIMIENTO 处为 BEGIN_OBJECT
我的流程从一个 xml 文件开始。使用以下方法将其转换为 json:
JSONObject xmlJSONObj = XML.toJSONObject(xmlString);
更新 1
<xs:element name="RESIDENCIA" id="ID_PAIS" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element name="ID_PAIS">
<xs:annotation>
<xs:documentation>Codificación A3 de la ISO eliminando
España
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="3" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="ID_PROVINCIA_ISLA">
<xs:annotation>
<xs:documentation>Codificación según ANEXO 4
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="5" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:choice>
<xs:element name="MOVIMIENTO" maxOccurs="31">
<xs:complexType>
<xs:sequence>
<xs:element name="N_DIA" type="N_DIAType" />
<xs:element name="ENTRADAS">
<xs:simpleType>
<xs:restriction base="xs:unsignedLong">
<xs:totalDigits value="4" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="SALIDAS">
<xs:simpleType>
<xs:restriction base="xs:unsignedLong">
<xs:totalDigits value="4" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PERNOCTACIONES">
<xs:simpleType>
<xs:restriction base="xs:unsignedLong">
<xs:totalDigits value="4" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
有什么想法吗?? 谢谢
【问题讨论】:
-
是的,都是