Как сохранить содержимое проанализированного сообщения JSON в строковые переменные на основе ключевых слов? - PullRequest
1 голос
/ 24 мая 2019

Мне нужна помощь для сохранения текста из проанализированного сообщения JSON в переменные на основе ключевых слов.Под этим я подразумеваю, что у меня есть JSON сообщение, которое я проанализировал один раз, и в этом сообщении оно возвращает такие вещи, как:

Name: Kobe Bryant<br/>
Company: Lakers<br/>
Email: kobe@lakers.com<br/>
etc.

Я хочу иметь возможность просмотреть этот блокtest, посмотрите, что написано «Имя: Коби Брайант», и сохраните Коби Брайанта в строковую переменную с именем «name» и так далее.Как я могу справиться с этим?

public class ParseTest {
    public static void main(String[] args) throws Exception {

        String name;
        String company;
        String email;
        String phoneNumber;
        String projectType;
        String contactBy;
        String timeFrame;
        String message;

        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);

        MainParser mp = mapper.readValue(new File("/Users/kane/VersionControl/LambdaTest/src/InfoBox.txt"), MainParser.class);

        if ("blah".equals(mp.getTopicArn())) {
            //Send to proposal table
            System.out.println(mp.getSubject());
            System.out.println(mp.getMessage());
        } else if ("blah blah".equals(mp.getTopicArn())) {
            //Send to infoBox table
            System.out.println(mp.getMessage());
        }
    }
}

JSON, который я анализирую:

{
 "Subject" : "Proposal Request (sent Wed May 22 2019 14:47:49 GMT-0400 (Eastern Daylight Time))",
 "Message" : "Name: Kobe Bryant\nCompany: Lakers\nEmail: kobe@lakers.com"
}

Вот класс POJO:

private String Subject;
private String Message;

public String getSubject() {
    return Subject;
}

public void setSubject(String subject) {
    Subject = subject;
}

public String getMessage() {
    return Message;
}

public void setMessage(String message) {
    Message = message;
}

1 Ответ

0 голосов
/ 29 мая 2019

У вас есть полезная нагрузка JSON, в которой одно из значений содержит данные в парах key:value, разделенных на новую строку \n. Нам нужно создать два POJO класса: Message для root JSON и Person - внутренние данные о персонале. Эти два класса могут выглядеть так:

class Message {

    private String subject;
    private String message;

    // getters, setters, toString
}

class Person {

    private String name;
    private String company;
    private String email;

    // ... more properties

    // getters, setters, toString
}

Мы можем проанализировать вашу JSON полезную нагрузку, как показано ниже:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;

import java.io.File;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);

        Message message = mapper.readValue(jsonFile, Message.class);
        String[] lines = message.getMessage().split("\n");

        Map<String, String> properties = Stream.of(lines)
                .map(i -> i.split(":"))
                .filter(i -> i.length == 2)
                .collect(Collectors.toMap(i -> i[0].trim(), i -> i[1].trim()));

        Person person = mapper.convertValue(properties, Person.class);
        System.out.println(person);
    }
}

Пример печати выше для вашей JSON полезной нагрузки:

Person{name='Kobe Bryant', company='Lakers', email='kobe@lakers.com'}

Как видите, мы создали Map из внутренних данных и использовали convertValue метод для преобразования Map в Person класс.

Смотри также:

  1. Java 8 - Преобразовать список в карту
  2. Как десериализовать карту в POJO?
  3. Как сериализовать в java.util.List и java.util.Map с Джексоном
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...