Map中的Json对象,如何在java中获取它?

问题描述 投票:0回答:3

在XPage应用程序中,我在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());
}   

在控制台中我永远不会得到“有对象?”打印声明。我究竟做错了什么?

java json xpages
3个回答
1
投票

您使用的JavaScript方法JSON.parse只返回一个简单的JavaScript对象,而不是JsonJavaObject。如果没有额外的不必要的开销,您不能在Java中使用JavaScript对象。不要使用json2.jss,像Paul Withers所说的那样使用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,你会得到java.util.HashMap而不是JsonJavaObject


1
投票

是否已设置sessionScope变量?使用sesScope.containsKey("configJSON")进行验证。如果它是一个空的JSON对象,它将是“{}”而不是null。如果您从REST服务或Notes文档加载为JSON,则它可能是String而不是JsonJavaObject。要解析JSON字符串,可以使用com.ibm.commons.util.io.json.JsonParser。 JsonJavaObject的构造函数需要一个Map,不确定这是否是传入的内容。


-1
投票

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);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.