AnyLogic
Развернуть
Размер шрифта

Преобразование данных

Обновлено 16.02.2024

AnyLogic Cloud API переходит на уровень абстракции выше языка, используемого при разработке модели (в случае AnyLogic это Java) и позволяет взаимодействовать с моделью, используя различные клиентские языки. С помощью API вы можете задавать элементы входных данных, выгружать выходные данные, взаимодействовать с запущенной моделью.

С учетом всех этих особенностей механизм преобразование данных является частью API.

Если обобщить, он работает следующим образом:

  • JSON — это универсальный формат данных в AnyLogic Cloud API и основной формат работы REST API.
  • Jackson используется для преобразования данных между Java и JSON. Примеры преобразования приведены в таблице ниже. Чтобы ваши данные преобразовывались без потерь, следуйте определенным базовым принципам, которые также описаны ниже.
    В процессе преобразования из JSON в Java, Jackson определяет целевой тип данных и пытается соответствующим образом преобразовать строку. При обратном преобразовании целевой тип не идентифицируется.
  • Существуют исключения, когда преобразование из Java в JSON выполняется особым способом, без использования Jackson. Это относится, в частности, к объектам палитры Анализ AnyLogic: DataSet, HistogramData, Histogram2DData, StatisticsContinuous, StatisticsDiscrete.
    Объекты этих классов считаются только выходными данными, так что они никак не могут передаваться из API-клиента модели.
JSON Java
Примитивные типы
Number double, float, int, long и так далее (любой численный тип)
Boolean boolean
String String
Исключение: Классы AnyLogic со специфическим преобразованием Java в JSON. Возможность обратного преобразования не предусмотрена.
{
  dataX:[1,2,3,4],
  dataY:[10,20,30,40]
}
DataSet
{
  hits: [0,0,0,1,5,67,335,441,138,13],
  hitsOutHigh: 0,
  hitsOutLow: 0,
  intervalWidth: 1.2,
  lowerBound: -8.6,
  statistics: {
    count: 1000,
    max: 2.83,
    mean: 0.0005,
    min: -3.91,
    type: "DISCRETE",
    variance: 0.959
  }
}
HistogramData
{
  hits: [
    [8, 4, 4, 4, 9],
    [5, 6, 8, 2, 1],
    [3, 8, 7, 6, 8],
    [7, 8, 5, 7, 9],
    [3, 4, 3, 9, 6],
  ],
  hitsOutHigh: [0,0,0,0,0],
  hitsOutLow: [0,0,0,0,0],
  xMax: 10,
  xMin: 0,
  yMax: 1,
  yMin: 0
}
Histogram2DData
{
  type: "CONTINUOUS",
  count:1375730,
  min:0.0,
  max:10.0,
  mean:0.9915478405530092,
  variance:0.14075328464389159,
  totalTime:999999.2699032243
  }
StatisticsContinuous
{
  type: "DISCRETE",
  count: 1000,
  max: 2.83,
  min: -3.91,
  mean: 0.0005,
  variance: 0.959
}
StatisticsDiscrete
Стандартные комплексные типы, для которых используются правила Jackson.
Форматированная строка (String), например, "2019-05-13T15:34:03.976" Date
Date Date
[12.5, 34,156.9] массив значений double[]
["red", "white","blue"] массив строк ArrayList<String>
Преобразуйте в JSON, используя API, и посмотрите на получившуюся структуру Любой комплексный класс
Пользовательские классы, для которых используются правила Jackson.
{ name:"John",age:33 }
public class Person {
  private String name;  
  private int age;
  public String getName() { 
    return name; 
  }
  public int getAge() { 
    return age;
  }
  public void setName(String name) {
    this.name = name;
  }
  public void setAge(int age) {
    this.age = age;
  }
}
{ name:"John", age:33 }
public class Person {
  public String name;
  public int age;
}

Чтобы удостовериться, что преобразование данных в ваших нестандартных объектах безопасно, следуйте рекомендациям:

  • Поля классов, которые вы планируете передавать, следует объявлять публичными. Если классы объявлены приватными, им следует задать публичные get…() и set…() функции.
  • Для Java классов следует задать стандартный публичный конструктор.
Как мы можем улучшить эту статью?