Java 使用Jackson解析JSON时获取特定值
我有以下JSON:Java 使用Jackson解析JSON时获取特定值,java,json,jackson,Java,Json,Jackson,我有以下JSON: [ { "A":"Lorem Ipsum ", "B":"Lorem Ipsum ", "C":"Lorem Ipsum ", "D":"Lorem Ipsum ", "E":"Lorem Ipsum ", "F":"Lorem Ipsum ", "G":301, "H":[ { "Lorem Ipsum ":4,
[
{
"A":"Lorem Ipsum ",
"B":"Lorem Ipsum ",
"C":"Lorem Ipsum ",
"D":"Lorem Ipsum ",
"E":"Lorem Ipsum ",
"F":"Lorem Ipsum ",
"G":301,
"H":[
{
"Lorem Ipsum ":4,
"Lorem Ipsum ":20,
"Lorem Ipsum":0
},
{
"Lorem Ipsum ":5,
"Lorem Ipsum ":19.2,
"Lorem Ipsum ":0.8
},
{
"Lorem Ipsum ":1,
"Lorem Ipsum ":8,
"Lorem Ipsum ":4
},
{
"Lorem Ipsum ":3,
"Lorem Ipsum ":14.2,
"Lorem Ipsum ":5.8
},
{
"Lorem Ipsum ":2,
"Lorem Ipsum ":20,
"Lorem Ipsum ":0
}
],
"I":[
],
"J":[
],
"20-01-2014":20,
"27-01-2014":19.2,
"30-12-2013":8,
"13-01-2014":14.2,
"06-01-2014":20,
"K":"81.40"
},
{
"reportKey":"something"
}
]
我想获取reportKey
值,然后将其从文件中删除。但首先我需要访问它,而我的代码似乎不起作用:
final ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readValue(rawContentParameters, JsonNode.class);
logger.info("ExportController : generatesExportExcel : parameters: {}", jsonNode.get("reportKey").textValue());
但是我得到了一个java.lang.NullPointerException
。为什么?
解决方案:
final ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readValue(rawContentParameters, JsonNode.class);
logger.info("ExportController : generatesExportExcel : parameters: {}", rootNode.get(rootNode.size() - 1).get("reportKey").textValue());
您正在访问根
JsonNode
,就像它是一个对象一样,但它被包装在一个数组中。您需要先从数组中提取第二个对象,然后才能访问reportKey
:
JsonNode array = objectMapper.readValue(rawContentParameters, JsonNode.class);
JsonNode object = array.get(1);
String reportKey = object.get("reportKey").textValue();
logger.info("ExportController : generatesExportExcel : parameters: {}", reportKey);
首先获取列表中的第二个元素
jsonNode.get(1).get("reportKey")
您可以使用库中的
JSONObject
和JSONArray
:
//instantiate your json array (e.g. from a string, or a file)
//String s = "[...]";
String s = FileUtils.readFileToString(new File(yourFile));
JSONArray json = new JSONArray(s);
//get the reportKey value:
json.get(1).get("reportKey");
//removing it:
//removing all the node: {"reportKey":"something"}
json.remove(1);
//removing only "reportKey":"something" and keeping {}:
json.get(1).remove("reportKey");
objectMapper.readValue(rawContentParameters,JsonNode.class)
是否返回null?否。它返回JSON文件的完整内容。请尝试jsonNode.get(1).get(“reportKey”).textValue()
。它不起作用,我会收到相同的错误消息。它不起作用,我会收到相同的错误。可能是来自JSON文件的其他内容吗?@Q3SanD道歉-从数组中获取错误项。我已经更新了答案以反映这一点。我知道。我没提,但我自己改正了。然而,它仍然不起作用。但是谢谢你的意见!对不起,你们都没事。在到达reportKey
值之前,我忘记了有几个数组。请参阅原始帖子以查看我所更改的内容。