Массив JSON из объекта JSON возвращает значение null

Я хочу прочитать массив JSON

"connectTo":[   
    {
        "url": "wss://localhost/opt/siml"
    }   
],

из строки JSON:

{

"cluster":{
    "enabled":"true",
    "clusterName":"cluster0",
    "simlURL":"wss://localhost:5443/opt/siml"
},

"simlFieldWatchUrl":"fieldwatchholder.jsp",

"persistFolder":"clusterconfig/concentratorBPersist",

"sslCrtFile":"clusterconfig/certDirB/siml.crt",
"sslKeyFile":"clusterconfig/certDirB/siml.key",

"SIMLID":"TestServerB",

"localWebProxyServer":"localhost",
"localWebProxyPort":8080,
"SIMLProxyPort":8400,
"SIMLWebPort":8300,

"turnOnExtraSIMLWebSocket":"false",

"autoPromoteNewConnectionsFromPurgatory":true,

"connectTo":[   
    {
        "url": "wss://localhost/opt/siml"
    }   
],

"tempLogins":[
    {
        "username":"root",
        "password":"root"
    }
]

}

Мой код для чтения URL-адреса:

JSONArray connectTo = (JSONArray) config.get("connectTo");
                System.out.println("Connect to : " + connectTo);
                for (Object o : connectTo) {
                    JSONObject connect = (JSONObject) o;
                    String url = (String) connect.get("url");
                    System.out.println(url);
                }

Но System.out.println («Подключиться к:» + connectTo); это возвращается Подключиться к : []

Я прочитал какой-то старый вопрос, но не получил удовлетворительного ответа. Пожалуйста помоги. И заранее спасибо :)

Эта строка - весь ваш json? Допустимый json должен начинаться с {или [.

Guts 09.03.2018 14:30

Эта строка - всего лишь часть json, которую я хочу прочитать. Весь json - это большой файл.

p05p 09.03.2018 14:31

Разместите Json в правильном формате, и мы поможем вам извлечь контент.

nimi0112 09.03.2018 14:32

Хм, вы пробовали конвертировать в JSONObject вместо JSONArray?

Guts 09.03.2018 14:32

Да, пробовал вроде JSONObject connectTo = (JSONObject) config.get ("connectTo"); но бросает исключение литья.

p05p 09.03.2018 14:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
1 091
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я просто предполагаю, что config - это JSONObject.

JSONArray connectTo = config.getJSONArray("connectTo");

config.get() возвращает объект, а config.getJSONArray() возвращает JSONArray.

но то же самое, что я сказал выше для config.getJSONArray, он показывает, что метод getJSONArray не может разрешить

p05p 09.03.2018 14:42

Каков результат System.out.println (config.toString ());?

Kokogino 09.03.2018 14:46

{"cluster": {"simlURL": "wss: \ / \ / localhost: 8200 \ / opt \ / siml", "c‌ lustreName": "cluster‌ 0", "enabled": "true"} ‌ , "tempLogins": [{"pas‌ sword": "root", "usern‌ ame": "root"}], "autoP‌ romoteNewConnections‌ FromPurgatory": true, ‌ "turnOnExtraSIMLWebS‌ ocket": "false" , «SIML‌ WebPort»: 8200, «persi‌ stFolder»: «clusterco‌ nfig \ / концентраторAP ersist», «localWebPro‌ xyServer»: «localhost‌», «SIMLProxyPort»: 81‌ 00, «_ sslDirectory»: " ‌ clusterconfig \ / certD‌ "," connectTo ": []," ss‌ lCrtFile ":" clusterco‌ nfig \ / certDirA \ / siml‌ .crt "," localWebProxy‌ Port ": 8080," sslKeyFi‌ le " : "clusterconfig \ / ‌ certDirA \ /siml.key", ‌ "simlFieldWatchUrl": ‌ "fieldwatchholder.js‌ p"}

p05p 09.03.2018 14:47

Мне жаль, что это грязно, но это строка Json

p05p 09.03.2018 14:48

Похоже, ваш "connectTo" на самом деле пуст. Так что с кодом все в порядке. И этот JSON полностью отличается от того, о котором идет речь.

Kokogino 09.03.2018 14:52

О да, я этого не заметил. Но я не уверен, почему он не читает это. Я не понимаю, что там читается "tempLogins": [{"пароль": "root", "username": "root"}], который совпадает с connectTo. Есть ли у вас какие-либо идеи.?

p05p 09.03.2018 14:57

У вас есть JSON, хранящийся в файле, и вы читаете его оттуда? Или как получить этот JSON?

Kokogino 09.03.2018 15:04

JSONObject config = (JSONObject) новый JSONParser (). Parse (новый FileReader (файл)); файловая переменная - это путь к файлу json.

p05p 09.03.2018 15:05

О, я вижу. Вы используете библиотеки org.json.simple, а не org.json. Вот почему .getJSONArray не работает.

Kokogino 09.03.2018 15:22

Попробуй это:

JSONArray connectTo =config.getJSONArray("connectTo");

                    System.out.println("Connect to : " + connectTo);
                    for (int i=0;i<connectTo.length();i++) 
    {
                        JSONObject connect = connectTo.getJSONObject(i);
                        String url = connect.get("url");
                        System.out.println(url);
                    }

для config.getJSONArray он показывает, что метод getJSONArray не может разрешить.

p05p 09.03.2018 14:41

Где вы определили свою переменную конфигурации?

nimi0112 09.03.2018 14:44

JSONObject config = (JSONObject) новый JSONParser (). Parse (новый FileReader (файл)); а файл - это путь к файлу json.

p05p 09.03.2018 14:45

@ p05p JSONObject config = новый JSONObject (новый JSONParser (). parse (новый FileReader (файл));

nimi0112 09.03.2018 14:47

все равно не повезло :(

p05p 09.03.2018 15:11

Я заставил его работать вот так, не уверен, помогает ли это:

var json = {
  "connectTo": [{
    "url": "wss://localhost/opt/siml"
  }]
};

for (var o = 0; o < json.connectTo.length; o++) {
  console.info(json.connectTo[o].url);
}

Прошу прощения, но для этого мне нужно изменить мою строку json. ?

p05p 09.03.2018 14:45

Другие вопросы по теме