Java 使用Jackson解析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,

我有以下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,
            "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
值之前,我忘记了有几个数组。请参阅原始帖子以查看我所更改的内容。