JSONとJavaで問題が発生しています。データ構造をJSONにエクスポートしてファイルに保存する機能があります。しかし、逆のことをしてデータ構造を Java にインポートしようとすると、エラーが発生し、その出力は次のようになります。
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 コードは、ネットワーク内に含まれるノードの配列であり、各ノード オブジェクトには String nodeID、3 つの Float 変数、次に atom と呼ばれるオブジェクトが含まれます。このアトムには、float の 2 つの文字列と、linkTo および linkFrom と呼ばれる 2 つの配列が含まれます。これらには、リンクを表すオブジェクトが含まれます (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");
.....
簡単なものが欠けているだけだと思いますが、これを微調整しようとして1週間近く費やしましたが、どこにも行きません!
for ループ内の println(node) ステートメントがノードを正確に出力するため、ノードが適切にロードされていることがわかります。動作していないように見えるノード ID を取得しようとしているだけです。順序を変更して x または y float を取得しようとしても、エラーが発生します。
ありがとう。