Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Загрузка и сохранение JSON-данных

Материал из Онлайн справочника
Перейти к: навигация, поиск


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Описание[1]

Этот скетч-пример показывает, как при помощи метода loadJSON() считывать данные из JSON-файла, а затем делать из этих данных графические объекты.

JSON-файл выглядит следующим образом: { "bubbles": [ { "position": { "x": 160, "y": 103 }, "diameter": 43.19838, "label": "Happy" }, { "position": { "x": 372, "y": 137 }, "diameter": 52.42526, "label": "Sad" } ] }.

Пример

  1. // массив с объектами-пузырями «Bubble»:
  2. Bubble[] bubbles;
  3. // объект JSONObject:
  4. JSONObject json;
  5.  
  6. void setup() {
  7.   size(640, 360);
  8.   loadData();
  9. }
  10.  
  11. void draw() {
  12.   background(255);
  13.   // показываем все пузыри:
  14.   for (Bubble b : bubbles) {
  15.     b.display();
  16.     b.rollover(mouseX, mouseY);
  17.   }
  18.   //
  19.   textAlign(LEFT);
  20.   fill(0);
  21.   text("Click to add bubbles.", 10, height-10);
  22.    //  "Кликните, чтобы нарисовать пузырь"
  23. }
  24.  void loadData() {
  25.   // загружаем JSON-файл;
  26.   // советуем вписать полный путь –
  27.   // пока проблема с путем не будет решена:
  28.   json = loadJSONObject("data.json");
  29.  
  30.   JSONArray bubbleData = json.getJSONArray("bubbles");
  31.  
  32.   // размер массива объектов «Bubble» определяется
  33.   // общим количеством XML-элементов под названием «bubble»:
  34.   bubbles = new Bubble[bubbleData.size()];
  35.  
  36.   for (int i = 0; i < bubbleData.size(); i++) {
  37.     // считываем все объекты в массиве:
  38.     JSONObject bubble = bubbleData.getJSONObject(i);
  39.     // считываем позицию объекта:
  40.     JSONObject position = bubble.getJSONObject("position");
  41.     // считываем из данных о позиции координаты X и Y:
  42.     int x = position.getInt("x");
  43.     int y = position.getInt("y");
  44.    
  45.     // считываем диаметр и текст:
  46.     float diameter = bubble.getFloat("diameter");
  47.     String label = bubble.getString("label");
  48.  
  49.     // помещаем объект в массив:
  50.     bubbles[i] = new Bubble(x, y, diameter, label);
  51.   }
  52. }
  53.  
  54.  void mousePressed() {
  55.   // создаем новый пузырь в виде объекта JSONObject:
  56.   JSONObject newBubble = new JSONObject();
  57.  
  58.   // задаем новую позицию объекта в виде объекта JSONObject:
  59.   JSONObject position = new JSONObject();
  60.   position.setInt("x", mouseX);
  61.   position.setInt("y", mouseY);
  62.  
  63.   // добавляем в новый пузырь данные о позиции:
  64.   newBubble.setJSONObject("position", position);
  65.  
  66.   // добавляем в новый пузырь диаметр и текст:
  67.   newBubble.setFloat("diameter", random(40, 80));
  68.   newBubble.setString("label", "New label");
  69.  
  70.   // добавляем новый пузырь в массив:
  71.   JSONArray bubbleData = json.getJSONArray("bubbles");
  72.   bubbleData.append(newBubble);
  73.  
  74.   if (bubbleData.size() > 10) {
  75.     bubbleData.remove(0);
  76.   }
  77.  
  78.   // сохраняем новые данные:
  79.   saveJSONObject(json,"data/data.json");
  80.   loadData();
  81. }
  82.  
  83.  
  84.  
  85.  
  86. // класс «Bubble»
  87.  
  88. class Bubble {
  89.   float x,y;
  90.   float diameter;
  91.   String name;
  92.  
  93.   boolean over = false;
  94.  
  95.   // создание «Bubble»:
  96.   Bubble(float x_, float y_, float diameter_, String s) {
  97.     x = x_;
  98.     y = y_;
  99.     diameter = diameter_;
  100.     name = s;
  101.   }
  102.  
  103.   // проверяем, находится ли курсор над пузырем:
  104.   void rollover(float px, float py) {
  105.     float d = dist(px,py,x,y);
  106.     if (d < diameter/2) {
  107.       over = true;
  108.     } else {
  109.       over = false;
  110.     }
  111.   }
  112.  
  113.   // показываем пузырь:
  114.   void display() {
  115.     stroke(0);
  116.     strokeWeight(2);
  117.     noFill();
  118.     ellipse(x,y,diameter,diameter);
  119.     if (over) {
  120.       fill(0);
  121.       textAlign(CENTER);
  122.       text(name,x,y+diameter/2+20);
  123.     }
  124.   }
  125. }

См.также

Внешние ссылки

  1. processing.org - Loading JSON Data by Daniel Shiffman.