У меня возникли проблемы с JSON и Java, у меня есть рабочая функция для экспорта данных в JSON и сохранения их в файле. Но когда я пытаюсь сделать обратное и импортировать strucutre данных обратно в Java, я получаю сообщение об ошибке, выход которого является:Java JSON Объект не найден
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at .....
Caused by: java.lang.RuntimeException: JSONObject["nodeID"] not found.
at processing.data.JSONObject.get(JSONObject.java:549)
at processing.data.JSONObject.getString(JSONObject.java:568)
at Graph.loadJSON(Graph.java:934)
... 21 more
Из этой ошибки я считать, что строка «NodeId» не может быть найдено в узле, но в выходных данных JSON, который выглядит следующим образом:
{"network": [
{"node": {
"nodeID": "1",
"radius": 40
"atom": {
"id": "a-2675-EH",
"activeTime": 0,
"type": "Motor",
"linkFrom": [{
"atomID": "a-2312-TL",
"delay": 0.20000000298023224
}],
"linkTo": [{
"atomID": "a-3289-Ql",
"delay": 0.20000000298023224
}]
},
.....
код JSON представляет собой массив узлов, содержащихся в сети, то каждый объект узла содержит строку NodeId, и 3 Поплавок переменных , затем объект, называемый атомом. Затем этот атом содержит две строки, float и 2 массива, называемые linkTo и linkFrom, которые содержат объекты для представления ссылки (atomID и delay, string и float).
И код Java для загрузки каждого узла из сети выглядит следующим образом:
JSONObject network = loadJSONObject(selection.getAbsolutePath());
JSONArray nodes = network.getJSONArray("network");
for (int i=0; i<nodes.size(); i++)
{
//Load node
JSONObject node = nodes.getJSONObject(i);
String nodeID = node.getString("nodeID"); <-- Error occurs here
Float x = node.getFloat("x");
Float y = node.getFloat("y");
Float radius = node.getFloat("radius");
JSONObject atom = node.getJSONObject("atom");
.....
Я уверен, что я просто отсутствует что-нибудь простое, но я потратил почти неделю, пытаясь настроить это и не к чему!
Я знаю, что узел правильно загружается, потому что оператор println (node) внутри цикла for выдает узел точно так, как должен, он просто пытается получить идентификатор узла, который, похоже, не работает. Даже если я изменю порядок и попытаюсь извлечь x или y float, который также вызывает ошибку.
Спасибо.
Попробуйте заменить 'node.getString (" nodeID ");' с 'node.getJSONObject (" node "). GetString (" nodeID "); ' –
Ahh блестящий, это работает сейчас! Если вы не возражаете, не могли бы вы объяснить, почему вы должны использовать getJSONObject? Поскольку у меня уже есть JSONObject узла, значит, это не так, как сказать node - node - nodeID, если вы понимаете, что я имею в виду? – Alex
'getJSONArray()' предоставит вам все объекты JSON в квадратных скобках. То, что у вас было, было на самом деле JSONObject '{" node ": {" nodeID ":" 1 "," radius ": 40 ...' ... Таким образом, чтобы получить узел, нам пришлось делать 'getJSONObject (« node ») ' –