Как я могу получить каждый ключ и значение из файла JSON в Java, используя библиотеку org. json? - PullRequest
0 голосов
/ 23 апреля 2020

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

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

{
  "Variable1":"-",
  "Variable2":" Test "
}

Я использую библиотеку org. json, и я хотел бы знать, возможно ли это и если да, то как мне этого добиться? Первоначально я пытался поместить переменные в массив с именем «Переменные», но каждый раз, когда я пытался получить этот массив, он выдавал ошибку, в которой говорилось, что JSONObject [«Переменные»] не является JSONArray. Не уверен, если это вызвано из-за проблемы в JDK или из-за проблемы в моем коде. Это, конечно, вещь для обсуждения в другой ветке. Пока это то, что у меня есть (FilePath - это строковая переменная, которая содержит полный путь к файлу):

String Contents = new String((Files.readAllBytes(Paths.get(FilePath))));
JSONObject JsonFile = new JSONObject(Contents);
JSONArray VariableList = JsonFile.getJSONArray("Variables");
for (Object Item: VariableList) {
    Map.Entry Item2 = (Map.Entry)Item;
    System.out.println("Key: " + Item2.getKey() + ", Value: " + Item2.getValue());
}

Приведенный выше код должен работать, если JSON выглядел примерно так (да Я сказал, что должен, потому что это не работает):

{
  "Variables": {
    "Variable1":"-",
    "Variable2":" Test "
  }
}

Если это возможно, как я смогу получить ключ и значение, используя первый формат JSON? Если это невозможно, то как бы я сделал это альтернативным способом? Имейте в виду, что имя ключа никогда не совпадает, так как ключ и значение будут отличаться в зависимости от того, что пользователь хочет, чтобы они были, поэтому важно иметь возможность * l oop через каждый элемент и получите и его ключ, и ценность.

Спасибо за ваше время и усилия.

1 Ответ

1 голос
/ 23 апреля 2020

"Variables" : { ... } - это JSONObject, а не JSONArray.

Для пакета org.json

try {
    String contents = "{\"Variables\":{\"Variable1\":\"-\",\"Variable2\":\" Test \"}}";
    JSONObject jsonFile = new JSONObject(contents);
    JSONObject variableList = jsonFile.getJSONObject("Variables"); // <-- use getJSONObject
    JSONArray keys = variableList.names ();
    for (int i = 0; i < keys.length (); ++i) {
        String key = keys.getString(i);
        String value = variableList.getString(key);
        System.out.println("key: " + key + " value: " + value);
    }
} catch (Exception e) {
    e.printStackTrace();
}

Для пакета JSON.simple

String contents = new String((Files.readAllBytes(Paths.get(FilePath))));
JSONObject jsonFile = new JSONObject(contents);
JSONObject variableList = jsonFile.getJSONObject("Variables"); // <-- use getJSONObject
variableList.keySet().forEach(key -> {
    Object value = jsonObj.get(key);
    System.out.println("key: "+ key + ", value: " + value);
});
...