diff --git a/java/examples/Topics/Advanced Data/LoadSaveJSONTest/Bubble.pde b/java/examples/Topics/Advanced Data/LoadSaveJSONTest/Bubble.pde new file mode 100644 index 000000000..3a7b9b7f9 --- /dev/null +++ b/java/examples/Topics/Advanced Data/LoadSaveJSONTest/Bubble.pde @@ -0,0 +1,40 @@ +// A Bubble class + +class Bubble { + float x,y; + float diameter; + String name; + + boolean over = false; + + // Create the Bubble + Bubble(float x_, float y_, float diameter_, String s) { + x = x_; + y = y_; + diameter = diameter_; + name = s; + } + + // CHecking if mouse is over the Bubble + void rollover(float px, float py) { + float d = dist(px,py,x,y); + if (d < diameter/2) { + over = true; + } else { + over = false; + } + } + + // Display the Bubble + void display() { + stroke(0); + strokeWeight(2); + noFill(); + ellipse(x,y,diameter,diameter); + if (over) { + fill(0); + textAlign(CENTER); + text(name,x,y+diameter/2+20); + } + } +} diff --git a/java/examples/Topics/Advanced Data/LoadSaveJSONTest/LoadSaveJSONTest.pde b/java/examples/Topics/Advanced Data/LoadSaveJSONTest/LoadSaveJSONTest.pde new file mode 100644 index 000000000..df55a3db9 --- /dev/null +++ b/java/examples/Topics/Advanced Data/LoadSaveJSONTest/LoadSaveJSONTest.pde @@ -0,0 +1,126 @@ +/** + * Loading XML Data + * by Daniel Shiffman. + * + * This example demonstrates how to use loadJSON() + * to retrieve data from a JSON file and make objects + * from that data. + * + * Here is what the JSON looks like (partial): + * +{ + "bubbles": [ + { + "position": { + "x": 160, + "y": 103 + }, + "diameter": 43.19838, + "label": "Happy" + }, + { + "position": { + "x": 372, + "y": 137 + }, + "diameter": 52.42526, + "label": "Sad" + } + ] +} + */ + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +// An Array of Bubble objects +Bubble[] bubbles; +// A Table object +JSONObject json; + +void setup() { + size(640, 360); + loadData(); +} + +void draw() { + background(255); + // Display all bubbles + for (Bubble b : bubbles) { + b.display(); + b.rollover(mouseX, mouseY); + } + // + // textAlign(LEFT); + // fill(0); + // text("Click to add bubbles.", 10, height-10); +} + +void loadData() { + // Load JSON file + String jsonString = join(loadStrings("data.json"), "\n"); + //println(jsonString); + + try { + json = new JSONObject(jsonString); + JSONArray bubbleData = json.getJSONArray("bubbles"); + + // The size of the array of Bubble objects is determined by the total XML elements named "bubble" + bubbles = new Bubble[bubbleData.length()]; + + for (int i = 0; i < bubbleData.length(); i++) { + JSONObject bubble = bubbleData.getJSONObject(i); + JSONObject position = bubble.getJSONObject("position"); + int x = position.getInt("x"); + int y = position.getInt("y"); + + float diameter = (float)bubble.getDouble("diameter"); + String label = bubble.getString("label"); + + bubbles[i] = new Bubble(x, y, diameter, label); + } + } + catch (JSONException e) { + e.printStackTrace(); + } +} + +// Still need to work on adding and deleting + +void mousePressed() { + + // Create a new XML bubble element + // XML bubble = xml.addChild("bubble"); + // + // // Set the poisition element + // XML position = bubble.addChild("position"); + // // Here we can set attributes as integers directly + // position.setInt("x",mouseX); + // position.setInt("y",mouseY); + // + // // Set the diameter element + // XML diameter = bubble.addChild("diameter"); + // // Here for a node's content, we have to convert to a String + // diameter.setContent("" + random(40,80)); + // + // // Set a label + // XML label = bubble.addChild("label"); + // label.setContent("New label"); + // + // + // // Here we are removing the oldest bubble if there are more than 10 + // XML[] children = xml.getChildren("bubble"); + // // If the XML file has more than 10 bubble elements + // if (children.length > 10) { + // // Delete the first one + // xml.removeChild(children[0]); + // } + // + // // Save a new XML file + // saveXML(xml,"data/data.xml"); + // + // // reload the new data + // loadData(); +} + diff --git a/java/examples/Topics/Advanced Data/LoadSaveJSONTest/data/data.json b/java/examples/Topics/Advanced Data/LoadSaveJSONTest/data/data.json new file mode 100644 index 000000000..bcb0079c3 --- /dev/null +++ b/java/examples/Topics/Advanced Data/LoadSaveJSONTest/data/data.json @@ -0,0 +1,36 @@ +{ + "bubbles": [ + { + "position": { + "x": 160, + "y": 103 + }, + "diameter": 43.19838, + "label": "Happy" + }, + { + "position": { + "x": 372, + "y": 137 + }, + "diameter": 52.42526, + "label": "Sad" + }, + { + "position": { + "x": 273, + "y": 235 + }, + "diameter": 61.14072, + "label": "Joyous" + }, + { + "position": { + "x": 121, + "y": 179 + }, + "diameter": 44.758068, + "label": "Melancholy" + } + ] +} \ No newline at end of file