1

Тема: TJson

Есть вопрос, как обращаться с обектом TJson?
Т.е. если это массив, есть ли аналог .length? И можно ли к элементам массива обращаться через [1], например?

video{ LG&Samsung<-(lan)->HMS<-(vpn)->Neutron s8&note8 }audio

2 (2017.01.04 22:57:41 отредактировано WendyH)

Re: TJson

Есть два класса: TJsonObject и TJsonArray. Первый - общий, для работы с JSON как с объектом, второй для работы как с массивом.
У TJsonObject есть свойство Count, которое отвечает за количество свойств в объекте.
У TJsonArray - свойство Length.

У любого класса можно посмотреть в справочнике функций в редакторе все их методы и свойства, которые у них есть.

+ Пример на C++Script
{
  int nCount, nAge; string sData, sName; TJsonObject JSON; TJsonArray JSONARRAY;
  
  sData = '{ "name": "Вася", "age": 35, "isAdmin": false, "friends": [0,1,2,3] }';
  
  JSON = TJsonObject.Create();
  try {
    JSON.LoadFromString(sData);
    sName     = JSON.S["name"   ];
    nAge      = JSON.I["age"    ];
    JSONARRAY = JSON.A["friends"];
    nCount    = JSONARRAY.Length;
    
  
  } finally { JSON.Free(); }
  
  ShowMessage(Format("Имя: %s, Возраст: %d, Количество друзей: %d", [sName, nAge, nCount]));
 
}

А вообще, я так привык к подсказкам при наборе объектов, где вываливается список доступных свойств или методов у объекта, что теперь и не могу жить без аддона, специально для этого сделанного. Там становится всё ещё проще. После набора точки будет показано окно с доступными функциями и их описанием. Намного подробней, чем во встроенном справочнике.

Методы S, I, B... у этих объектов - это просто вспомогательные функции, которые возвращают значение в нужном типе (конвертация в string, integer, boolean и проч.)

P.S.:

slim8020 пишет:

И можно ли к элементам массива обращаться через [1], например?

Да, можно. Начиная с нуля.
Кстати, можно даже обращаться к элементам массива через строку по именам свойств и номеру, разделённых слешем.
Например:
JSON.S["friends\\0"] (двойной слеш, если это C++Script, если PascalScript - одинарный слеш).

Sony Bravia KDL-32CX523
Спасибо сказали: slim80201