Получение значения из элемента JSON в Java - PullRequest
1 голос
/ 05 апреля 2019

У меня есть файл json, например:

{
  "A":"-0.4",
  "B":"-0.2",
  "C":"-0.2",
  "D":"X",
  "E":"0.2",
  "F":"0.2",
  "J":"0.3"

}

Я хочу вернуть каждый элемент списка json, когда я вызываю его через мою функцию. Я сделал функцию, чтобы сделать это:

public JSONObject my_function() {
JSONParser parser = new JSONParser();

    List<JSONObject> records = new ArrayList<JSONObject>();
    try (FileReader reader = new FileReader("File.json")) {

        //Read JSON file
        Object obj = parser.parse(reader);
        JSONObject docs = (JSONObject) obj;
        LOGGER.info("read elements" + docs); // it display all a list of a json file like this: {"A":"-0.4","B":"-0.2","C":"-0.2","D":"X","E":"0.2","F":"0.2","J":"0.3"}


        for (int i = 0; i < docs.size(); i++) {
            records.add((JSONObject) docs.get(i));
            System.out.println((records)); // it return null 

        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }
    LOGGER.info("The first element of a list is:" +records.get(0)); // return null
    return records.get(0);

Как я могу изменить свою функцию, чтобы она возвращала значение каждого элемента в файле json. Например, когда я вызываю my_function:

my_function.get("A") should display -0.4

Спасибо

Ответы [ 2 ]

3 голосов
/ 05 апреля 2019

Сначала вам нужен класс для отображения

public class Json {

private String a;
private String b;
private String c;
private String d;
private String e;
private String f;
private String j;

//getters and setters

}

Тогда в вашем рабочем классе

ObjectMapper mapper = new ObjectMapper();

//JSON from file to Object
Json jsn = mapper.readValue(new File("File.json"), Json.class);

тогда вы можете использовать этот объект обычным способом ...

вот зависимость, которую я использовал

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.3</version>
</dependency>

Ссылки

0 голосов
/ 05 апреля 2019

В Java вы можете использовать только методы класса, насколько я знаю. Если вы хотите получить свой второй элемент по его первому, вы должны в своем классе создать 2 метода, таких как

class Main {
Map<String, String> records = new HashMap<>();

public JSONObject my_function() {
// your realization where you should insert your pairs into Map.
}

public String get(String firstElement){
return map.getValue(firstElement);
}

}


class someOtherClass {
Main main = new Main();
main .my_function();
main .get("A");

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...