Дополнительные функции для работы с JSON (sizejson, readjson, valuejson) Версия 5.64 Работа с JSON форматом
Парсер JSON формата осуществляется функцией
parserjson(Rez_Json, исходник);
где
Rez_Json - Символьное имя объекта
исходник - string, в котором записан Json формат
Возвращает 1 при удаче
-1 если формат JSON не верный.
Затем по символьному имени можно обращаться к структуре Json:
Цитата:
parserjson(Rez_Json, исходник);
Rez_Json.products[1].options.15[2] // доступ к элементу JSON
Rez_Json.products[1].options.15[2] // доступ к элементу JSON
Если элемента не существует, вернется ERROR_SEARCH_JSON
В дальнейшем появятся функции вычисления размеров массивов и тд.
Пример как узнать значение с частично неизвестной частью ключа.
Можно одновременно загружать и создавать несколько Json объектов:
Цитата:
parserjson(Rez_Json, исходник);
parserjson(Rez_Json_2, исходник1);
parserjson(Rez_Json_2, исходник1);
Пример
CODE:
/*
{
"clientKey":"dce6bcbb1a728ea8d563de6d169a2057",
"task":
{
"type":"ImageToTextTask",
"body":"BASE64_BODY_HERE!",
"phrase":false,
"case":false,
"numeric":0,
"math":false,
"minLength":0,
"maxLength":0
}
}
*/
string Json="{^"clientKey^":^"" + "dce6bcbb1a728ea8d563de6d169a2057^"," +
"^"task^":" +
"{^"type^":^"ImageToTextTask^"," +
"^"body^":^"BASE64_BODY_HERE!^"," +
"^"phrase^":false," +
"^"case^":false," +
"^"numeric^":0," +
"^"math^":false," +
"^"minLength^":0," +
"^"maxLength^":0}}";
messagebox (Json);
parserjson(Rez_Json, Json);//Создаем объект JSON с символьным именем Rez_Json и Парсим запись JSON с Json
messagebox (Rez_Json.task.case);//Выводим значение объекта JSON
{
"clientKey":"dce6bcbb1a728ea8d563de6d169a2057",
"task":
{
"type":"ImageToTextTask",
"body":"BASE64_BODY_HERE!",
"phrase":false,
"case":false,
"numeric":0,
"math":false,
"minLength":0,
"maxLength":0
}
}
*/
string Json="{^"clientKey^":^"" + "dce6bcbb1a728ea8d563de6d169a2057^"," +
"^"task^":" +
"{^"type^":^"ImageToTextTask^"," +
"^"body^":^"BASE64_BODY_HERE!^"," +
"^"phrase^":false," +
"^"case^":false," +
"^"numeric^":0," +
"^"math^":false," +
"^"minLength^":0," +
"^"maxLength^":0}}";
messagebox (Json);
parserjson(Rez_Json, Json);//Создаем объект JSON с символьным именем Rez_Json и Парсим запись JSON с Json
messagebox (Rez_Json.task.case);//Выводим значение объекта JSON
Пример:
CODE:
string исходник="";
string исходник1="";
string Tt;
if (fopen ("C:\json.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник=исходник+Tt;
fclose();
}
if (fopen ("C:\json - 1.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник1=исходник1+Tt;
fclose();
}
messagebox (исходник);
messagebox (исходник1);
parserjson(Rez_Json, исходник);
parserjson(Rez_Json_2, исходник1);
//Объект Rez_Json
int n=0;
loop()
{
Tt=Rez_Json.products[1].options.15[n];
if (Tt=="ERROR_SEARCH_JSON")break;//Перебор всего массива до ошибки 47,48, 25, 79, 95
messagebox(Tt);
n++;
}
//Объект Rez_Json_2
messagebox(Rez_Json_2.data[0].attributes[1].value);//2015
messagebox(Rez_Json_2.data[0].images[0].url);//https://www.olx.ua/advert-picture-1.jpg
string исходник1="";
string Tt;
if (fopen ("C:\json.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник=исходник+Tt;
fclose();
}
if (fopen ("C:\json - 1.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник1=исходник1+Tt;
fclose();
}
messagebox (исходник);
messagebox (исходник1);
parserjson(Rez_Json, исходник);
parserjson(Rez_Json_2, исходник1);
//Объект Rez_Json
int n=0;
loop()
{
Tt=Rez_Json.products[1].options.15[n];
if (Tt=="ERROR_SEARCH_JSON")break;//Перебор всего массива до ошибки 47,48, 25, 79, 95
messagebox(Tt);
n++;
}
//Объект Rez_Json_2
messagebox(Rez_Json_2.data[0].attributes[1].value);//2015
messagebox(Rez_Json_2.data[0].images[0].url);//https://www.olx.ua/advert-picture-1.jpg
Соответственно файлы
json.txt
CODE:
{
"user_id" : 10,
"session_id" : "2c2l3h4ii271aojentejtdcmh3",
"products":
[
{
"product_id" : 15,
"options" :
{
"15" : [45, 47],
"18" : 52
},
"quantity" : 1,
"price" : 1500
},
{
"product_id" : 16,
"options" :
{
"15" : [47,48, 25, 79, 95],
"18" : 51
},
"quantity" : 2,
"price" : 1000
}
]
}
"user_id" : 10,
"session_id" : "2c2l3h4ii271aojentejtdcmh3",
"products":
[
{
"product_id" : 15,
"options" :
{
"15" : [45, 47],
"18" : 52
},
"quantity" : 1,
"price" : 1500
},
{
"product_id" : 16,
"options" :
{
"15" : [47,48, 25, 79, 95],
"18" : 51
},
"quantity" : 2,
"price" : 1000
}
]
}
json - 1.txt
CODE:
{
"data": [
{
"id": 123,
"status": "active",
"url": "https://www.olx.ua/oferta/url.html",
"created_at": "2018-02-02 09:35:16",
"activated_at": "2018-02-02 09:32:52",
"valid_to": "2018-03-04 09:32:52",
"title": "This is title",
"description": "This is description",
"category_id": 123,
"advertiser_type": "private",
"external_id": 12345,
"external_url": "http://myshop.com/advert/123",
"contact": {
"name": "John",
"phone": 123123123,
"location": {
"city_id": 1,
"district_id": null,
"latitude": 53.123,
"longitude": 17.123
}
},
"images": [
{
"url": "https://www.olx.ua/advert-picture-1.jpg"
},
{
"url": "https://www.olx.ua/advert-picture-2.jpg"
}
],
"price": {
"value": 123,
"currency": "PLN",
"negotiable": false,
"trade": false
},
"salary": null,
"attributes": [
{
"code": "model",
"value": "cts",
"values": null
},
{
"code": "year",
"value": 2015,
"values": null
}
],
"courier": null
}
]
}
"data": [
{
"id": 123,
"status": "active",
"url": "https://www.olx.ua/oferta/url.html",
"created_at": "2018-02-02 09:35:16",
"activated_at": "2018-02-02 09:32:52",
"valid_to": "2018-03-04 09:32:52",
"title": "This is title",
"description": "This is description",
"category_id": 123,
"advertiser_type": "private",
"external_id": 12345,
"external_url": "http://myshop.com/advert/123",
"contact": {
"name": "John",
"phone": 123123123,
"location": {
"city_id": 1,
"district_id": null,
"latitude": 53.123,
"longitude": 17.123
}
},
"images": [
{
"url": "https://www.olx.ua/advert-picture-1.jpg"
},
{
"url": "https://www.olx.ua/advert-picture-2.jpg"
}
],
"price": {
"value": 123,
"currency": "PLN",
"negotiable": false,
"trade": false
},
"salary": null,
"attributes": [
{
"code": "model",
"value": "cts",
"values": null
},
{
"code": "year",
"value": 2015,
"values": null
}
],
"courier": null
}
]
}
Вложенные массивы
Перебор всех массивов Rez_Json.members[?].powers[?] в Json
Файл
Цитата:
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
Скрипт перебора
CODE:
string исходник="";
string Tt;
if (fopen ("C:\json.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник=исходник+Tt;
fclose();
}
messagebox (исходник);
parserjson(Rez_Json, исходник);
//Объект Rez_Json
int n=0;
int n1=0;
loop()
{
Tt=Rez_Json.members[n].powers[n1];//Перебор всех массивов Rez_Json.members[?].powers[?] в Json
if (Tt=="ERROR_SEARCH_JSON")
{
if (n1==0) break;
n++;
n1=0;
}
else
{
messagebox(Tt);
n1++;
}
}
string Tt;
if (fopen ("C:\json.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник=исходник+Tt;
fclose();
}
messagebox (исходник);
parserjson(Rez_Json, исходник);
//Объект Rez_Json
int n=0;
int n1=0;
loop()
{
Tt=Rez_Json.members[n].powers[n1];//Перебор всех массивов Rez_Json.members[?].powers[?] в Json
if (Tt=="ERROR_SEARCH_JSON")
{
if (n1==0) break;
n++;
n1=0;
}
else
{
messagebox(Tt);
n1++;
}
}
Узнаем age объекта у которого powers "Damage resistance"
CODE:
string исходник="";
string Tt;
if (fopen ("C:\json.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник=исходник+Tt;
fclose();
}
messagebox (исходник);
parserjson(Rez_Json, исходник);
//Объект Rez_Json
int n=0;
int n1=0;
loop()
{
Tt=Rez_Json.members[n].powers[n1];//Перебор всех массивов Rez_Json.members[?].powers[?] в Json
if (Tt=="ERROR_SEARCH_JSON")
{
if (n1==0) break;
n++;
n1=0;
}
else
{
//messagebox(Tt);
if (Tt=="Damage resistance")
{
messagebox(Rez_Json.members[n].age);
break;
}
n1++;
}
}
string Tt;
if (fopen ("C:\json.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник=исходник+Tt;
fclose();
}
messagebox (исходник);
parserjson(Rez_Json, исходник);
//Объект Rez_Json
int n=0;
int n1=0;
loop()
{
Tt=Rez_Json.members[n].powers[n1];//Перебор всех массивов Rez_Json.members[?].powers[?] в Json
if (Tt=="ERROR_SEARCH_JSON")
{
if (n1==0) break;
n++;
n1=0;
}
else
{
//messagebox(Tt);
if (Tt=="Damage resistance")
{
messagebox(Rez_Json.members[n].age);
break;
}
n1++;
}
}
(Добавление)
Пример
products[1].options.15[0] = 47
Цитата:
{
"user_id" : 10,
"session_id" : "2c2l3h4ii271aojentejtdcmh3",
"products":
[
{
"product_id" : 15,
"options" :
{
"15" : [45, 47],
"18" : 52
},
"quantity" : 1,
"price" : 1500
},
{
"product_id" : 16,
"options" :
{
"15" : [47,48],
"18" : 51
},
"quantity" : 2,
"price" : 1000
}
]
}
"user_id" : 10,
"session_id" : "2c2l3h4ii271aojentejtdcmh3",
"products":
[
{
"product_id" : 15,
"options" :
{
"15" : [45, 47],
"18" : 52
},
"quantity" : 1,
"price" : 1500
},
{
"product_id" : 16,
"options" :
{
"15" : [47,48],
"18" : 51
},
"quantity" : 2,
"price" : 1000
}
]
}