[英]Json object in Map, how to get hold of it in java?
在XPages应用程序中,我在sessionScope变量中具有JSON格式的应用程序配置。
我不知道如何在Java中再次掌握此配置?
我试过了:
Map<String, Object> sesScope = ExtLibUtil.getSessionScope();
if (null != sesScope.get("configJSON")){
JsonJavaObject jsonObject = new JsonJavaObject();
jsonObject = (JsonJavaObject) sesScope.get("configJSON");
System.out.println("got object?");
System.out.println("json " + jsonObject.toString());
}
在控制台中,我从没有进入“获得对象”? 打印声明。 我究竟做错了什么?
是否已设置sessionScope变量? 使用sesScope.containsKey("configJSON")
进行验证。 如果它是一个空的JSON对象,它将是“ {}”而不是null。 如果要从REST服务或Notes文档作为JSON加载,则它可能是字符串而不是JsonJavaObject。 要解析JSON字符串,可以使用com.ibm.commons.util.io.json.JsonParser
。 JsonJavaObject的构造函数需要一个Map,不确定是否要传入。
您使用的JavaScript方法JSON.parse
仅返回普通的简单JavaScript对象,而不返回JsonJavaObject
。 没有更多不必要的开销,以后就无法在Java中使用JavaScript对象。 不要像保罗·威瑟斯(Paul Withers) JsonParser
那样使用json2.jss
,请使用JsonParser
。
更改从Notes字段获取JSON的代码:
#{javascript:
importPackage(com.ibm.commons.util.io.json);
var jsonText = doc.getItemValueString(itemname);
var jsonFactory:JsonFactory = JsonJavaFactory.instanceEx;
var jsonObject = JsonParser.fromJson(jsonFactory, jsonText);
sessionScope.put('configJSON', jsonObject);
}
通过删除不必要的行来修改提供的Java代码:
Map<String, Object> sesScope = ExtLibUtil.getSessionScope();
if (null != sesScope.get("configJSON")) {
JsonJavaObject jsonObject = (JsonJavaObject) sesScope.get("configJSON");
System.out.println("got object?");
System.out.println("json " + jsonObject.toString());
}
您现在应该可以了。 提示:如果使用JsonJavaFactory.instance
而不是JsonJavaFactory.instanceEx
, JsonJavaFactory.instanceEx
获得java.util.HashMap
而不是JsonJavaObject
JsonJavaObject是您的POJO java类吗? 如果是,请使用Fasterxml的ObjectMapper将JSON数据映射到JsonJavaObject类的字段。使用此方法将JSON数据映射到任何POJO类
public final T validateJson(final Map<String, Object> jsonMap, final T temmplateClass) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
try {
// convert JSON string to Map
String jsonString = objectMapper.writeValueAsString(jsonMap);
return objectMapper.readValue(jsonString, (Class<T>) temmplateClass);
} catch (JsonMappingException e) {
throw new NestableRuntimeException(String.format(ApiCommonConstants.INVALID_JSON_FIELD,
e.getPath().get(e.getPath().size() - 1).getFieldName()));
} catch (IOException e) {
throw new NestableRuntimeException(e.getMessage(), e);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.