Участник
Пользователь
- Сообщения
- 892
- Реакции
- 149
- Помог
- 25 раз(а)
Здравствуйте, впервые начал разбираться с json форматом.
Имею вот такой json:
И кусок кода с парсингом:
Вопрос в следующем, возможно ли проверять объект на наличие не только clip
А и на другие, к примеру, ammo, при этом не добавляя отдельный кусок кода с проверкой на ammo?
Или это нереально?
Имею вот такой json:
JSON:
{
"weapon_ak47": [
{
"name": "AK-47",
"clip": {
"cost": [1, 2, 3],
"value": [1, 2, 3]
},
"ammo": {
"cost": [13],
"value": [80]
}
}
],
"weapon_awp": [
{
"name": "AWP",
"clip": {
"cost": [1, 2, 3],
"value": [4, 5, 6]
},
"ammo": {
"cost": [13],
"value": [80]
}
}
]
}
И кусок кода с парсингом:
C++:
@Read__File() {
if(!file_exists(FILE__PATH)) {
set_fail_state("Invalid open file: ^"%s^"", FILE__PATH);
return;
}
new JSON: JSON_Handle = json_parse(FILE__PATH, true);
if(JSON_Handle == Invalid_JSON) {
set_fail_state("Invalid read file: ^"%s^"", FILE__PATH);
return;
}
new JSON_Size = json_object_get_count(JSON_Handle);
if(!JSON_Size) {
json_free(JSON_Handle);
set_fail_state("File ^"%s^" is empty.", FILE__PATH);
return;
}
g__ArrayWeapons = ArrayCreate(eArrayWeaponData);
new ArrayWeaponData[eArrayWeaponData];
new szBuffer[256];
new WeaponSize, CostSize, ValueSize;
new JSON: JSON_WeaponObject = Invalid_JSON;
new JSON: JSON_WeaponArray = Invalid_JSON;
new JSON: JSON_AbilityOjbect = Invalid_JSON;
new JSON: JSON_Cost = Invalid_JSON;
new JSON: JSON_Value = Invalid_JSON;
for(new i; i < JSON_Size; i++) {
json_object_get_name(JSON_Handle, i, szBuffer, charsmax(szBuffer));
if(!szBuffer[0] || szBuffer[0] == '#')
continue;
if(contain(szBuffer, "weapon_") != -1) {
JSON_WeaponObject = json_object_get_value(JSON_Handle, szBuffer);
formatex(ArrayWeaponData[ARRAY__WEAPON_NAME], charsmax(ArrayWeaponData[ARRAY__WEAPON_NAME]), szBuffer);
if(JSON_WeaponObject == Invalid_JSON)
continue;
WeaponSize = json_array_get_count(JSON_WeaponObject);
for(new j; j < WeaponSize; j++) {
JSON_WeaponArray = json_array_get_value(JSON_WeaponObject, j);
if(JSON_WeaponArray != Invalid_JSON) {
if(json_object_has_value(JSON_WeaponArray, "name", JSONString)) {
json_object_get_string(JSON_WeaponArray, "name", ArrayWeaponData[ARRAY__WEAPON_MENU_NAME], charsmax(ArrayWeaponData[ARRAY__WEAPON_MENU_NAME]));
}
if(json_object_has_value(JSON_WeaponArray, "clip", JSONObject)) {
JSON_AbilityOjbect = json_object_get_value(JSON_WeaponArray, "clip");
if(json_object_has_value(JSON_AbilityOjbect, "cost", JSONArray)) {
JSON_Cost = json_object_get_value(JSON_AbilityOjbect, "cost");
if(JSON_Cost != Invalid_JSON) {
CostSize = json_array_get_count(JSON_Cost);
for(new k; k < CostSize; k++) {
server_print("%i", json_array_get_number(JSON_Cost, k));
}
json_free(JSON_Cost);
}
}
if(json_object_has_value(JSON_AbilityOjbect, "value", JSONArray)) {
JSON_Value = json_object_get_value(JSON_AbilityOjbect, "value");
if(JSON_Value != Invalid_JSON) {
ValueSize = json_array_get_count(JSON_Value);
for(new k; k < ValueSize; k++) {
server_print("%i", json_array_get_number(JSON_Value, k));
}
json_free(JSON_Value);
}
}
}
}
ArrayPushArray(g__ArrayWeapons, ArrayWeaponData);
json_free(JSON_WeaponArray);
}
}
json_free(JSON_WeaponObject);
}
json_free(JSON_Handle);
server_print("ArraySize: %i", ArraySize(g__ArrayWeapons));
}
Вопрос в следующем, возможно ли проверять объект на наличие не только clip
C++:
if(json_object_has_value(JSON_WeaponArray, "clip", JSONObject)) {
JSON_AbilityOjbect = json_object_get_value(JSON_WeaponArray, "clip");
Или это нереально?