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