繁体   English   中英

Map中的Json对象,如何在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());
}   

在控制台中,我从没有进入“获得对象”? 打印声明。 我究竟做错了什么?

是否已设置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.instanceExJsonJavaFactory.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM