我想从JSON中创建一个Adapter类型的数组列表,但是由于JSON不是数组列表格式,所以我无法使用gson.fromJson()方法。
有没有什么方法可以通过解析下面的JSON来创建我的自定义对象列表?
JSON数据:
"source":{"adapter-config.adapter[0].name":"testAdapter1",
"adapter-config.adapter[0].resolverName":"serviceResolver",
"adapter-config.adapter[0].parameters[0].key":"serviceId",
"adapter-config.adapter[0].parameters[0].value":"serviceIdPathInEvent",
"adapter-config.adapter[0].parameters[1].key":"appId",
"adapter-config.adapter[0].parameters[1].value":"appIdPathEvent",
"adapter-config.adapter[0].parameters[2].key":"env",
"adapter-config.adapter[0].parameters[2].value":"envPathInEvnet"}
我的适配器对象:
public class Adapter {
private String name;
private String resolverName;
private List<KeyValuePair<String, String>> attributeList;
}
1条答案
按热度按时间xriantvc1#
Gson没有提供这样的功能。但是你可以通过手动从
JsonReader
阅读JSON数据,使用nextName()
使用JSON属性名,然后解析它们以确定它们代表的数据。你可以直接从JsonReader
读取,或者如果显示的JSON数据只是从一个更大的JSON文档中提取的,您可以为List<Adapter>
实现一个TypeAdapter
。然后,可以通过提供new TypeToken<List<Adapter>>() {}.getType()
作为类型,将TypeAdapter
注册到GsonBuilder
,或者您可以使用@JsonAdapter
注解保存List<Adapter>
的字段。对于
List<Adapter>
的实际解析,我建议存储 * 当前适配器 *(以及它在列表中的索引)。无论何时解析JSON属性名称,都可以检查名称中编码的索引是否等于 * 当前适配器 * 的索引,然后修改现有示例。否则,如果编码索引等于 * 当前适配器 * 的索引+1,则创建一个新的适配器示例,请将其添加到适配器列表中并重新分配 current adapter 变量及其索引变量。然后继续解析属性名称的其余部分,以找出要设置的Adapter字段值。(In如果你遇到了困难,请随时在评论中告诉我,我可以尝试提供一些具体的代码;但最好还是先自己尝试一下。)