проверка ключа JSONObject org.json.simple в JAVA

Ключ преобразуется в jsonobject с помощью org.json.simple. Я пробовал несколько способов сделать это, но все потерпели неудачу

1-й способ

JSONObject name1 = (JSONObject) jsonObject.get(key);

ошибка: невозможно преобразовать java.lang.string в org.json.simple.json.object

2-й способ

JSONParser parser = new JSONParser();
JSONObject name1 = (JSONObject) parser.parse(key);

ошибка: непредвиденный символ (N) в позиции 0. в org.json.simple.parser.Yylex.yylex (неизвестный источник) в org.json.simple.parser.JSONParser.nextToken (неизвестный источник) в org.json.simple. parser.JSONParser.parse(неизвестный источник) в org.json.simple.parser.JSONParser.parse(неизвестный источник) в org.json.simple.parser.JSONParser.parse(неизвестный источник)

3-й способ

Long name1 = Long.valueOf(jsonObject.get(key));

ошибка: Метод valueOf(String) в типе Long неприменим для аргументов (Object)

4-й способ

Я использовал эту функцию:

optJSONObject(key)

ошибка: optJSONObject не определен для JSONObject

Как я могу заставить это работать?


person Danish    schedule 17.11.2019    source источник
comment
Что такое строка key? Можете ли вы показать нам значение, которое содержит key?   -  person Troley    schedule 17.11.2019
comment
``` JSONObject json = новый JSONObject(); // получаем ключи json-объекта Set keys = obj.keySet(); Итератор iterator = keys.iterator(); //Итератор iterator = obj.keys(); Строковый ключ = ноль; в то время как (iterator.hasNext()) { key = (String) iterator.next();```   -  person Danish    schedule 17.11.2019
comment
в ключ каждой итерации может прийти string , JSONObject , JSONArray   -  person Danish    schedule 17.11.2019


Ответы (2)


Таким образом, функция JSONObject.get(key) обычно не возвращает сам объект json. Но пакет org.json учитывает это. Внимательное чтение с этого момента, поскольку org.json включает в себя 2 пакета JSONObject, org.json.simple и простой org.json.JSONObject, и поэтому я не знаю, работает ли это явно в org.json.simple, но это то, что я делаю при обработке JSONObjects с помощью пакета org.json.

JSONObject name1 = jsonObject.getJSONObject(key);

Эта строка делает то, что вы хотите сделать там. Попробуй это.

Пакет JSON содержит такие функции, как getInt, getString, getJSONObject, чтобы вы могли точно указать, какой тип данных вы хотите получить.

person Sepx3    schedule 17.11.2019
comment
сэр, я попробовал эту библиотеку org.json, но из-за этого я получил ошибку при разборе, потому что при разборе я использовал org.json.simple.. затем возникла ошибка org.json.simple не может анализироваться в org.json ``` Object obj = parser. parse (новый FileReader (C:/Users/Envy/Documents/company.json)); JSONObject jsonObject = (JSONObject) obj;``` - person Danish; 17.11.2019
comment
JSONObject jsonObject = (JSONObject) obj; JSONObject name1 = jsonObject.getJSONObject(key); метод getJSONObject(String) не определен для типа JSONObject - person Danish; 17.11.2019
comment
Это связано с тем, что вы определили, что ваш JSONObject извлекается из библиотеки org.json.simple.JSONObject, а не org.json.JSONObject. Это очень неясная вещь, но если вы проверите свои ссылки и измените их на org.json.JSONObject по всем направлениям, вы должны быть в порядке с этим методом. - person Sepx3; 17.11.2019
comment
JSONParser parser = new JSONParser(); это не определено в org.json.JSONObject.. как я это делаю...используя org.json.JSONObject. - person Danish; 17.11.2019
comment
Итак, что JSONParser делает для вас, я ничего не мог найти об этом - person Sepx3; 17.11.2019
comment
Пожалуйста, проверьте ссылку, где показано, как преобразовать один класс в другой с помощью jackson, и то же самое можно использовать для преобразования строки json в другие классы - thetechnojournals.com/2019/10/ - person Ashok Prajapati; 17.11.2019
comment
брат, я сделал это успешно, но почему значение обновления ключа не отражается в моем файле JSON.. - person Danish; 17.11.2019

Эта линия

ошибка : Неожиданный символ (N) в позиции 0.

в вашем 2nd way фрагменте кода/кавычке указано, что вы анализируете недопустимый JSON. JSONObject name1 = (JSONObject) parser.parse(key); key в этой строке, вероятно, содержит недопустимый JSON. Вот почему синтаксический анализатор выдает исключение.

Вы можете попытаться отладить код и посмотреть, как выглядят строки key, и вам следует выяснить, какие из них (если не все) содержат недопустимый JSON.

Я создал минималистическую программу, которая анализирует действительный JSONArray (или JSONObject, если файл содержит только один объект JSON) из файла (о котором вы упомянули в ответе @Sepx3). Я попытался использовать имена из ваших фрагментов кода для соответствующего кода, чтобы он оставался немного понятным.

Содержимое моего файла примера C:/Users/Envy/Documents/company.json:

[
  {
    "key": "value"
  },
  {
    "key1": "value1"
  },
  [
    {
      "key2": "value2"
    },
    {
      "key3": "value3"
    }
  ]
]

И код, который его анализирует, сохраняет его в объекте, а затем проверяет, был ли проанализирован JSONArray или один JSONObject (в моем примере это JSONArray).

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import java.io.FileReader;

public class DemoApplication {

    public static void main(String[] args) {
        JSONParser parser = new JSONParser();

        Object obj = null;
        try {

            obj = parser.parse(new FileReader("C:/Users/Envy/Documents/company.json"));

        } catch (Exception e) {
            // Handle possible exceptions
            e.printStackTrace();
        }

        // If the parsed string was a single json object
        if (obj instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) obj;

            // Do something with jsonObject, in this example it prints the content of jsonObject
            System.out.println(jsonObject);

        }
        // Or else if the parsed string was a json array
        else if (obj instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) obj;

            // Do something with jsonArray, in this example it prints the content of jsonArray
            System.out.println(jsonArray);
        }
    }
}

Я надеюсь, что это хоть немного поможет вам и направит вас на правильный путь.

person Troley    schedule 17.11.2019