【问题标题】:get the value of ArrayList of String value获取String值的ArrayList的值
【发布时间】:2019-03-08 09:59:41
【问题描述】:

请给我一个包含以下值的列表

[ { "sender" : "sys" , "message" : [ "Hello, " , "how are you?"] ,"transaction_date" : { "$date" : "2019-02-14T17:34:12.705Z"} , "has_suggestions" : true } , { "sender" : "user" , "message" : [ "Hello." , "hey you"] , "visited" : true , "transaction_status" : "Succeded" , "transaction_date" : { "$date" : "2019-02-14T17:34:12.705Z"} , "has_suggestions" : true , "suggestion_list" : [ "Yes, I am." , "No, I am not."] , "suggestion_list_type" : "buttons"}, { "sender" : "sys" , "message" : { "has_form" : true , "form_type" : "prehandover_form" , "data" : { "text" : [ "Kindly provide your info"]}} , "visited" : false , "transaction_status" : "Succeded" , "transaction_date" : { "$date" : "2019-02-14T17:34:15.386Z"}}]

我尝试在代码下方使用 Jackson JsonNode 遍历 JSON 数据的内容:

ObjectMapper object = new ObjectMapper();
JsonNode jsonNode = object.readTree(value);
String sender = jsonNode.get("sender").textValue();

但是在线程“main”java.lang.NullPointerException 中出现异常 非常感谢您对遍历 JSON 数据的任何帮助。

【问题讨论】:

  • 你有一个json数组,读jsonNode.get(0).get("sender")
  • 你收到一个数组而不是一个对象
  • 在执行JsonNode jsonNode = object.readTree(value); 之后,jsonNode 将包含一个数组。 jsonNode.get("sender") 将返回 null。您对数组中的哪些元素感兴趣?
  • 你的 JSON 混合了 Key: valueKey: Array
  • @vizsatiz,感谢这种方法有效。

标签: java arrays jackson java-stream jackson-databind


【解决方案1】:

您需要从 JsonNode 获取 ArrayList。 这是您的解决方案。

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(json);
String sender = jsonNode.get(0).get("sender").textValue();

【讨论】:

  • 感谢@Nitin 我不得不为每个值循环遍历 Jsonnode,因为我的 JsonNode 是一个数组。我很感激!
  • 欢迎@AfeezOlawale。如果您对答案投赞成票,将不胜感激。提前致谢。
  • 很好的解决方案没有回答这个问题,但让我找到了答案。
【解决方案2】:

JsonNode 包含多个对象。由于要读取所有发送者元素,您可以使用以下代码。

public static void main(String[] args) throws IOException {
        File file = new File("src\\main\\java\\json.txt");
        FileInputStream value = new FileInputStream(file);
        ObjectMapper object = new ObjectMapper();
        JsonNode jsonNode = object.readTree(value);
        for (int i=0;i<jsonNode.size();i++){
            System.out.println(jsonNode.get(i).findValue("sender").textValue());
        }
    }

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 2014-01-02
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多