我下面有一个 JSON 字符串,我必须将其解析为 java 对象。挑战在于值没有标记,而且还有一个集合没有标记每组值。请协助或参考类似的例子。
{
"body": {
"records": [
["567567/0001", "1499669323", "2806", "676768775", "258596", [
["collection/Coin", "AZR", "456.65", "0"]
]],
["456456/0001", "1499669327", "2806", "6767687565", "252256", [
["collection", "AZR", "3940.00", "13"],
["collection/Coin", "AZR", "89.63", "0"]
]],
["354645/0001", "1499669330", "2806", "6767687878", "25452212", [
["collection", "AZR", "3940.00", "13"],
["collection/Coin", "AZR", "125.36", "0"]
]],
["4654/0001", "1499669333", "2806", "676768787", "2514785", [
["collection", "AZR", "4560.00", "21"],
["collection/Coin", "AZR", "987.25", "0"]
]]
]
},
"responseCode": 0,
"responseMsg": "OK"
}
我想将 JSON 字符串解析成的类如下
public class Record {
private String cdmId;
private Integer transactionNumber;
private String collectorUserNumber;
private String collectionStartTime;
private String sealNumber;
private List<CollectionType> collection;
// getters and setters
}
集合类型类
public class CollectionType {
private String type;
private String currency;
private Double totalAmount;
private Integer totalPcs;
// getters and setters
}
在GSON你有三种选择如何在描述分析您的对象UserGuide。
使用 Gson 的解析器 API(低级流解析器或 DOM 解析器 JsonParser)解析数组元素,然后对每个数组元素使用 Gson.fromJson()。这是首选方法。这是一个演示如何执行此操作的示例。
为 Collection.class 注册一个类型适配器,它查看每个数组成员并将它们映射到适当的对象。这种方法的缺点是它会搞砸 Gson 中其他集合类型的反序列化。
为 MyCollectionMemberType 注册一个类型适配器,并将 fromJson() 与 Collection 一起使用。
我实现了选项 3. 自定义TypeAdapter
.
包含整个消息的消息类。
public class Message {
private Body body;
private int responseCode;
private String responseMsg;
// getters and setters
}
正文类包含记录
public class Body {
private List<Record> records;
public Body() {
records = new ArrayList<Record>();
}
public void addRecod(Record record) {
records.add(record);
}
public List<Record> getRecords() {
return records;
}
}
Record 和 CollectionType 类与您发布的相同。
RecordAdapter 类来解析您的自定义集合。
public class RecordAdapter extends TypeAdapter<Record> {
@Override
public Record read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return null;
}
Record record = new Record();
// read array representing a record
reader.beginArray();
record.setCdmId(reader.nextString());
record.setTransactionNumber(Integer.valueOf(reader.nextString()));
record.setCollectorUserNumber(reader.nextString());
record.setCollectionStartTime(reader.nextString());
record.setSealNumber(reader.nextString());
// read array containing CollectionType objects
reader.beginArray();
while(reader.hasNext()) {
// read array containing single CollectionTyoe object
reader.beginArray();
CollectionType collectionType = new CollectionType();
collectionType.setType(reader.nextString());
collectionType.setCurrency(reader.nextString());
collectionType.setTotalAmount(reader.nextDouble());
collectionType.setTotalPcs(reader.nextInt());
record.addCollectionType(collectionType);
// read end of array containing single CollectionTyoe object
reader.endArray();
}
// read end of array containing CollectionType
reader.endArray();
// read end of array representing a record
reader.endArray();
return record;
}
@Override
public void write(JsonWriter arg0, Record arg1) throws IOException {
// TODO Auto-generated method stub
}
}
尝试的主要方法
public static void main(String[] args) {
String input = "<Your JSON string goes here>";
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Record.class, new RecordAdapter());
Gson gson = builder.create();
Message message = gson.fromJson(input, Message.class);
System.out.println(message);
}
GSON 依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
<scope>compile</scope>
</dependency>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句