【发布时间】:2014-03-08 01:11:21
【问题描述】:
我是 JSON/GSON 的新手,但不是 Java 的新手……一直在研究,但没有找到明确的答案,让自己更加困惑。请多多包涵。可能是我的对象模型不太正确,但会注意到,如果顶级类(ConvergedNetwork)具有 CircuitId 或 Circuits gson.fromJson() 工作正常。只有当这个班级的同居者我得到一个空值。
我有以下 JSON 文档 (target.json)
{
"convergedNetwork": {
"circuitId": "58/VPXX/102866/TWCS",
"circuits": {
"circuit": [
{
"ZLocOid": 9010827045013519707,
"circuitId": "58/YHXX/105464/TWCS"
},
{
"ZLocOid": 9011240550013130225,
"circuitId": "58/YHXX/105404/TWCS"
}
]
}
}
}
我的 bean 类是:
package beans;
import com.google.gson.annotations.SerializedName;
public class ConvergedNetwork {
@SerializedName("convergedNetwork")
private Circuits circuits;
private CircuitId circuitId;
public CircuitId getCircuitId() {
return circuitId;
}
public void setCircuitId(CircuitId circuitId) {
this.circuitId = circuitId;
}
public Circuits getCircuits() {
return circuits;
}
public void setCircuits(Circuits circuits) {
this.circuits = circuits;
}
@Override
public String toString() {
return "ConvergedNetwork [circuits=" + circuits + ", circuitId="
+ circuitId + "]";
}
}
package beans;
import com.google.gson.annotations.SerializedName;
public class Circuits {
@SerializedName("circuits")
private Circuit circuit;
public Circuit getCircuit() {
return circuit;
}
public void setCircuit(Circuit circuit) {
this.circuit = circuit;
}
@Override
public String toString() {
return "Circuits: " +circuit.toString()+ "]";
}
}
package beans;
import java.util.Arrays;
import com.google.gson.annotations.SerializedName;
public class Circuit {
@SerializedName("circuit")
private ckt[] ckts;
public ckt[] getCkts() {
return ckts;
}
public void setCkts(ckt[] ckts) {
this.ckts = ckts;
}
@Override
public String toString() {
return "Circuit [ckts=" + Arrays.toString(ckts) + "]";
}
class ckt
{
long ZLocOid;
String circuitId;
public long getZLocOid() {
return ZLocOid;
}
public void setZLocOid(long zLocOid) {
ZLocOid = zLocOid;
}
public String getCircuitId() {
return circuitId;
}
public void setCircuitId(String circuitId) {
this.circuitId = circuitId;
}
@Override
public String toString() {
return "ckt [ circuitId=" + circuitId + ", ZLocOid=" + ZLocOid+ "]" ;
}
}
}
package beans;
import com.google.gson.annotations.SerializedName;
public class CircuitId {
@SerializedName("circuitId")
private String circuitId;
public String getCircuitId() {
return circuitId;
}
public void setCircuitId(String circuitId) {
this.circuitId = circuitId;
}
@Override
public String toString() {
return "Circuit [circuitId=" + circuitId + "]";
}
}
当我运行以下命令时:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String fileData = new String(Files.readAllBytes(Paths.get("target.json"))); ConvergedNetwork obj = gson.fromJson(fileData, ConvergedNetwork.class);
System.out.println("\n\n Obj: "+obj.getClass()+ "\n\n" + obj.toString());
我得到以下信息:
ConvergedNetwork [circuits=Circuits: Circuit [ckts=[ckt [ circuitId=58/YHXX/105464/TWCS, ZLocOid=0], ckt [ circuitId=58/YHXX/105404/TWCS, ZLocOid=9011240550013130225]]]], circuitId=null]
您会注意到它成功地解析了电路对象,但没有解析电路 ID 对象。是不是因为 ckt 类中的成员之一也被命名为 circuitId?还是我需要编写一个适配器类来帮助 GSON?
【问题讨论】: