Json Map中的对象,如何在java中获取它?
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());
}
在控制台中,我从未访问过 "got object?" 打印语句。我做错了什么?
是否设置了sessionScope变量?使用sesScope.containsKey("configJSON")
来验证。如果它是一个空的 JSON 对象,它将是“{}”而不是 null。如果您从 REST 服务或 Notes 文档加载为 JSON,则它可能是字符串而不是 JsonJavaObject。要解析 JSON 的字符串,可以使用 com.ibm.commons.util.io.json.JsonParser
。 JsonJavaObject 的构造函数需要一个 Map,不确定这是否是传入的内容。
JsonJavaObject 是您的 POJO java class 吗?
如果是,那么请使用 Fasterxml 的 ObjectMapper 将您的 JSON 数据映射到 JsonJavaObject 的字段 class.Use 此方法将您的 json 数据映射到任何 POJO class
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);
}
}
您使用的 JavaScript 方法 JSON.parse
,returns 只是一个简单的 JavaScript 对象,而不是 JsonJavaObject
。如果没有额外的不必要的开销,您不能稍后在 Java 中使用 JavaScript 对象。不要使用 json2.jss
,像 Paul Withers 所说的那样使用 JsonParser
。
更改从备注字段获取 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
,您将得到 java.util.HashMap
而不是 JsonJavaObject
在 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());
}
在控制台中,我从未访问过 "got object?" 打印语句。我做错了什么?
是否设置了sessionScope变量?使用sesScope.containsKey("configJSON")
来验证。如果它是一个空的 JSON 对象,它将是“{}”而不是 null。如果您从 REST 服务或 Notes 文档加载为 JSON,则它可能是字符串而不是 JsonJavaObject。要解析 JSON 的字符串,可以使用 com.ibm.commons.util.io.json.JsonParser
。 JsonJavaObject 的构造函数需要一个 Map,不确定这是否是传入的内容。
JsonJavaObject 是您的 POJO java class 吗? 如果是,那么请使用 Fasterxml 的 ObjectMapper 将您的 JSON 数据映射到 JsonJavaObject 的字段 class.Use 此方法将您的 json 数据映射到任何 POJO class
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);
}
}
您使用的 JavaScript 方法 JSON.parse
,returns 只是一个简单的 JavaScript 对象,而不是 JsonJavaObject
。如果没有额外的不必要的开销,您不能稍后在 Java 中使用 JavaScript 对象。不要使用 json2.jss
,像 Paul Withers 所说的那样使用 JsonParser
。
更改从备注字段获取 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
,您将得到 java.util.HashMap
而不是 JsonJavaObject