我有JSON文件看起来像
{
"SUBS_UID" : {
"featureSetName" : "SIEMENSGSMTELEPHONY MULTISIM",
"featureName" : "MULTISIMIMSI",
"featureKey" : [{
"key" : "SCKEY",
"valueType" : 0,
"value" : "0"
}
]
},
}
所以这个键是一个字符串“SUBS_ID”,这个值是一个名为Feature细节的模型,它包含属性“特性设置名称、特性名称、...”。所以我用这样google.json库从JSON文件中读取,
HashMap<String, FeatureDetails> featuresFromJson = new Gson().fromJson(JSONFeatureSet, HashMap.class);
然后我试图循环这个HashMap获取值,并将其转换为我的Feature细节模型,
for (Map.Entry entry : featuresFromJson.entrySet()) {
featureDetails = (FeatureDetails) entry.getValue();
}
这是我的FeatureDetails模型,
public class FeatureDetails {
private String featureSetName;
private String featureName;
private ArrayList<FeatureKey> featureKey;
private String groupKey;
private String groupValue;
public FeatureDetails() {
featureKey = new ArrayList<FeatureKey>();
}
public ArrayList<FeatureKey> getFeatureKey() {
return featureKey;
}
public void setFeatureKey(ArrayList<FeatureKey> featureKey) {
this.featureKey = featureKey;
}
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getGroupValue() {
return groupValue;
}
public void setGroupValue(String groupValue) {
this.groupValue = groupValue;
}
public String getFeatureName() {
return featureName;
}
public void setFeatureName(String featureName) {
this.featureName = featureName;
}
public String getFeatureSetName() {
return featureSetName;
}
public void setFeatureSetName(String featureSetName) {
this.featureSetName = featureSetName;
}
}
但我得到了一个例外"com.google.gson.internal.LinkedHashTreeMap不能铸造com.asset.vsv.models.FeatureDetail"。
代码位于Kotlin:useval type=object:TypeToken中
而不是
val type=object:TypeToken
您看到这一点的原因是,您告诉GSON使用行中的HashMap
结构来反序列化JSON结构
... = new Gson().fromJson(JSONFeatureSet, HashMap.class);
^^
Right here
因此,GSON不知道JSON中的子对象不是简单的键值对,即使该结构可能与FeatureDetails
对象的结构匹配。
一种解决方案是创建一个模型来包装你的Feature细节
对象,它将作为整个结构的根。这个对象可能看起来像这样:
public class FeatureDetailsRoot{
private FeatureDetails SUBS_UID; // poor naming, but must match the key in your JSON
}
最后,你将通过该模型的课程:
= new Gson().fromJson(JSONFeatureSet, FeatureDetailsRoot.class)
使现代化
在回复您在评论中关于添加/拥有多个FeatureDetails
对象的能力的问题时,目前的问题是您的JSON没有反映这种结构。也就是说,“SUBS_UID”
键指向单个对象,而不是数组对象。如果你想拥有这种能力,那么你的json需要被修改,以便它显示一个对象数组,如下所示:
{
"SUBS_UID" : [{
"featureSetName" : "Feature set name #1",
...attributes for feature #1
},
{
"featureSetName" : "Feature set name #2",
...attributes for feature #2
},
...other features
]
}
然后,您可以简单地更改根类,使其包含FeatureDetails
对象的列表,如下所示:
public class FeatureDetailsRoot{
private List<FeatureDetails> SUBS_UID;
}
让我知道这是否有意义(或者我是否误解了你)
试试这个:
HashMap<String, FeatureDetails> featuresFromJson = new Gson().fromJson(JSONFeatureSet, new TypeToken<Map<String, FeatureDetails>>() {}.getType());
当你浏览你的哈希图时,这样做:
for (Map.Entry<String, FeatureDetails> entry : featuresFromJson.entrySet()) {
FeatureDetails featureDetails = entry.getValue();
}
问题内容: 我有JSON文件,看起来像 因此,键是字符串“ SUBS_ID”,值是一个名为FeatureDetails的模型,其中包含属性“ featureSetName,featureName,…”。所以我像这样使用google.json lib从JSON文件中读取内容, 然后我试图遍历此HashMap以获取值并将其转换为我的FeatureDetails模型, 这是我的FeatureDetail
我得到以上的错误,如果有人知道,然后告诉我。。。我将非常感激 Java: XML:
下面是托管活动片段: 有问题的行是代码段的最后一行。这是我的语录片段。 假设我对主机活动没有扩展support.v4的看法是正确的,那么我该怎么做呢?
我试图反序列化从Web API接收的JSON字符串 然而,它给出了一个错误:无法强制转换或转换系统。字符串到App1。ApiResult
我使用Nashorn与Java制作一个模块化插件系统。插件将使用Javascript编写。一个重要的特性是具有可以用Javascript代码编写的处理程序。一开始,我的目标是制作一个简单的命令系统。javascript实现一个接口,并调用Java方法来注册命令。然而,我得到一个错误。我确保我使用的是Nashorn()返回true。 Javascript: Java代码:调用“侦听”: 其中'f'是
问题内容: 应用程序版本: JBoss 7.0.0,Oracle 11g(ojdbc6.jar)和JDK 6版本 当我尝试使用函数插入CLOB数据类型的值时遇到问题,出现以下异常。 在多个论坛中搜索后,未找到任何解决方案。 https://forums.oracle.com/forums/thread.jspa?threadID=279238 完成了部署WAR文件和配置JBoss oracle驱动