Не могу получить значение из JSONObject - PullRequest
0 голосов
/ 29 июня 2018

Поэтому я использую простую библиотеку json для выполнения некоторых операций json. Прямо сейчас я могу создать JSONObject из строки json, но я не могу получить значение из объекта, который я создал. Например, если я сделаю что-то вроде:

String value = (String) jsonRecord.get("Key");

Я получу сообщение об ошибке:

java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to java.lang.String

Я удалил приведение типа к строке, и это работает в IntelliJ. Однако, когда я делаю это в командной строке, я получаю сообщение об ошибке:

error: incompatible types: Object cannot be converted to String

Схема выглядит следующим образом:

    {   
       "myArray": {
          "array": ["Decaf mocha", "Vanilla mocha", "Chai Latte"]
       },
        "Item": {
          "string": "Decaf macha"
        }
    }

Обновление: toString() исправил проблему. Но когда я попытался получить массив, я получаю:

java.lang.ClassCastException: org.json.simple.JSONObject cannot be cast to org.json.simple.JSONArray

Может кто-нибудь подсказать, пожалуйста, как решить проблему? Спасибо!

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Вы можете предотвратить исключение ClassCastException с помощью Generics, поскольку Generics предоставляют проверки времени компиляции и могут использоваться для разработки безопасных для типов приложений.

0 голосов
/ 29 июня 2018

Вы не конвертируете значение записи json, которое вы извлекаете, в строку.

String value = String.valueOf(jsonRecord.get("Key"));

Это должно исправить твою проблему. Вы также можете использовать метод toString (), но я лично предпочитаю String.valueOf (), потому что иногда toString () имеет тенденцию давать значение мусора.

0 голосов
/ 29 июня 2018

Ваше значение - JSONObject, а не строка. Ваше сообщение об ошибке делает это совершенно ясно. Если вы действительно хотите это как строку, используйте

String value = jsonRecord.get("Key").toString();

Вы можете передать любой объект в System.out.println, не только строки, но чтобы фактически превратить его в строку, вам нужно вызвать toString() самостоятельно.

Однако, если вы ожидаете фактическую строку как Key, а не JSONObject, вам следует еще раз взглянуть на свой JSON, потому что вы делаете что-то не так.

UPDATE:

Хорошо, глядя на вашу схему, я вижу проблему. Вместо непосредственного сопоставления ключей со значениями ваш JSON сопоставляет ключи с объектами, которые затем содержат значения. Таким образом, чтобы получить массив в JSON, который вы разместили, вместо

value = jsonRecord.get("myArray")

вы бы использовали

JSONArray value = jsonRecord.getJSONObject("myArray").getJSONArray("array");

и для строки вы бы использовали

String value = jsonRecord.getJSONObject("Item").getString("string");
...