Как преобразовать JsonNode, содержащий список строк, в строку, разделенную запятыми, в Java

#java #arrays #json #string

#java #массивы #json #строка

Вопрос:

JsonNode:

 {
  name: ["bishal", "jaiswal", "Turtle"],
  title: "jaiswal"
}
 

Я хочу эффективно извлечь список name из JsonNode в виде строки, разделенной запятыми:

Выходной сигнал:

 nameList ="bishal,jaiswal,Turtle"
 

Помимо преобразования JsonNode name массива в список и последующего использования метода join для создания строки, разделенной запятыми. Есть какой — нибудь лучший способ сделать это?

Комментарии:

1. Если вы используете фреймворк для чтения JSON в объект, этот фреймворк может предоставить для этого функцию, например ResponseContainer в Swagger . Если вы не используете фреймворк, вы можете использовать простые строковые операции над ним, например split.

2. есть ли какой-либо способ, которым после доступа к name ключу из json мы можем напрямую преобразовать этот объект JsonNode в строку, разделенную запятыми, напрямую, не применяя слишком много операций, теперь я преобразую JsonNode в список с помощью ObjectMapper, а затем использую метод join в списке для генерации строки, разделенной запятыми, являетсяесть ли лучший способ сделать это?

3. В этом случае вы можете использовать Jackson JSON. Например, JsonNode rootNode = objectMapper.readTree(jsonData); JsonNode title = rootNode.path("title");

Ответ №1:

Вот хак

     ObjectMapper objectMapper = new ObjectMapper();
    final JsonNode jsonNode = objectMapper.readTree("{"name":["bishal","jaiswal","Turtle"],"title":"jaiswal"}");
    final JsonNode name = jsonNode.get("name");
    final Iterator<JsonNode> iterator = name.iterator();
    StringBuilder s = new StringBuilder();
    while (iterator.hasNext()){
        final JsonNode next = iterator.next();
        if(s.length() > 0){
            s.append(",");
        }
        s.append(next);
    }
    System.out.println(s.toString());
 

Надеюсь, это вам поможет.

Комментарии:

1. Уже упоминалось в вопросе, нужно сделать это без преобразования его в список, а затем изменить его на строку, разделенную запятыми.

2. Использование итератора аналогично подходу, поскольку мне нужно пройти весь массив JsonNode .. это работает, но я искал что-то другое. Все равно спасибо.

3. К сожалению, в Jackson Framework нет никакого служебного метода для объединения sting в JsonNode. Вот почему нам нужно перемещаться по массиву, или мы можем использовать string.join(), что более предпочтительно, чем перемещение по массиву. Будем надеяться, что в будущем Джексон выпустит поддержку такого требования.

Ответ №2:

В этом случае вы можете использовать Jackson JSON…

Jackson — очень популярная и эффективная библиотека на основе Java для сериализации или сопоставления объектов Java с JSON и наоборот

Например,

 ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonData); //jsonData is your json string here...
JsonNode names = rootNode.path("name");

Iterator<JsonNode> elements = names.elements();

while(elements.hasNext()){
    JsonNode name = elements.next();
    System.out.println("Names are = " name);
}
 

Пожалуйста, не могли бы вы сообщить мне, решило ли это вашу проблему? Спасибо