as-json icon indicating copy to clipboard operation
as-json copied to clipboard

Deserializer skips objects in array

Open snaffi opened this issue 1 month ago • 0 comments

Hello That large JSON couldn't be parsed correctly. It skips any element except one in menu.groups array

healthy-co.json

image

Model

import {JSON} from "json-as/assembly";

@json
export class Name {
    value!: string;
    @alias("localized_value")
    localizedValue!: string;
}

@json
export class Location {
    value!: string;
    @alias("localized_value")
    localizedValue!: string;
}

@json
export class Coordinate {
    lat!: f64;
    lng!: f64;
}

@json
export class Distance {
    value!: f64;
    unit!: string;
    @alias("unit_localized")
    unitLocalized!: string;
}

@json
export class Cuisine {
    id!: i64;
    name!: string;
    @alias("name_localized")
    nameLocalized!: string;
}

@json
export class Currency {
    id!: i64;
    code!: string;
    name!: string;
    label!: string;
    @alias("label_localized")
    labelLocalized!: string;
    position!: string;
    decimals!: i32;
    @alias("name_localized")
    nameLocalized!: string;
}

@json
export class Rating {
    average!: f32;
    count!: i32;
    state!: string;
    @alias("count_text")
    countText!: string;
}

@json
export class Scale {
    value!: i32;
    @alias("upper_bound")
    upperBound!: i32;
}

@json
export class PriceRating {
    average!: i32;
    range!: string;
    scale!: Scale;
}

@json
export class Term {
    term!: string;
    @alias("term_localized")
    termLocalized!: string;
}

@json
export class TextAttribute {
    @alias("attribute_name")
    attributeName!: string;
    value!: string;
    @alias("value_localized")
    valueLocalized!: string;
}

@json
export class Promotion {
    id!: i64;
    percentage!: i32;
    @alias("total_percentage")
    totalPercentage!: i32;
    @alias("internal_subsidize")
    internalSubsidize!: i32;
    cap!: i32;
    @alias("badge_type")
    badgeType!: string;
    value!: i32;
    @alias("min_basket_value")
    minBasketValue!: i32;
    text!: string;
    @alias("text_localized")
    textLocalized!: string;
    terms!: Array<Term> | null;
    @alias("text_attributes")
    textAttributes!: Array<TextAttribute> | null;
}

@json
export class MenuCurrency {
    id!: i64;
    code!: string;
    name!: string;
    label!: string;
    @alias("label_localized")
    labelLocalized!: string;
    position!: string;
    decimals!: i32;
    @alias("name_localized")
    nameLocalized!: string;
}

@json
export class Price {
    original!: f64;
    discount!: f64;
    total!: f64;
    @alias("discount_percentage")
    discountPercentage!: i32;
}

@json
export class MenuGroupOption {
    id!: i64;
    item!: string;
    @alias("item_localized")
    itemLocalized!: string;
    price!: Price;
    groups!: Array<MenuGroup> | null;
    @alias("is_active")
    isActive: bool = true;
}

@json
export class MenuGroup {
    id!: i64;
    name!: string;
    description!: string;
    type!: string;
    @alias("multi_select")
    multiSelect!: boolean;
    min!: i32;
    max!: i32;
    order!: i32;
    active!: boolean;
    @alias("name_localized")
    nameLocalized!: string;
    @alias("description_localized")
    descriptionLocalized!: string;
    options!: Array<MenuGroupOption> | null;
}


@json
export class OperationalShift {
    @alias("start_time")
    startTime!: string;
    @alias("end_time")
    endTime!: string;
}

@json
export class OperationalHours {
    @alias("day_of_week")
    dayOfWeek!: i32;
    active!: boolean;
    shifts!: Array<OperationalShift> | null;
}

@json
export class MenuItem {
    id!: i64;
    item!: string;
    @alias("item_localized")
    itemLocalized!: string;
    link!: string;
    @alias("superapp_link")
    superappLink!: string;
    @alias("image_url")
    imageUrl!: string;
    @alias("images_urls")
    imagesUrls!: Array<string> | null;
    description!: string;
    @alias("description_localized")
    descriptionLocalized!: string;
    price!: Price;
    active!: boolean;
    order!: i32;
    @alias("maximum_quantity")
    maximumQuantity!: i32;
    @alias("operational_hours")
    operationalHours!: Array<OperationalHours> | null;
    groups!: Array<MenuGroup> | null;
    @alias("inactivity_reason")
    inactivityReason!: string | null;
    @alias("inactivity_text")
    inactivityText!: string | null;
}

@json
export class MenuGroupItem {
    id!: i64;
    name!: string;
    @alias("name_localized")
    nameLocalized!: string;
    active!: boolean;
    @alias("image_url")
    imageUrl!: string;
    @alias("category_type")
    categoryType!: string;
    @alias("items_layout")
    itemsLayout!: string;
    items: Array<MenuItem> | null = [];
}

@json
export class Menu {
    id!: i64;
    currency!: MenuCurrency;
    active!: boolean;
    groups!: Array<MenuGroupItem> | null;
}

@json
export class Delivery {
    @alias("delivery_method")
    deliveryMethod!: string;
    @alias("delivery_type")
    deliveryType!: string;
    average!: i32;
    range!: string;
    unit!: string;
    @alias("unit_localized")
    unitLocalized!: string;
    source!: string;
    @alias("careem_delivery_fee")
    careemDeliveryFee!: i32;
    @alias("is_careem_delivery_supported")
    isCareemDeliverySupported!: boolean;
    fee!: i32;
    @alias("distance_in_km")
    distanceInKm!: f64;
    @alias("color_state")
    colorState!: string;
}

@json
export class Tag {
    id!: i64;
    name!: string;
    link!: string;
    global!: boolean;
    @alias("name_localized")
    nameLocalized!: string;
}

@json
export class Brand {
    id!: i64;
    name!: string;
    count!: i32;
    @alias("brand_media")
    brandMedia!: Array<string> | null;
    @alias("name_localized")
    nameLocalized!: string;
}

@json
export class OrderCount {
    count!: i32;
    max!: i32;
    since!: i32;
    ratio!: f32;
}

@json
export class MerchantSubText {
    type!: string;
    text!: string;
}

@json
export class AvailabilityDetails {
    @alias("is_available")
    isAvailable!: boolean;
}

@json
export class Restaurant {
    @alias("id")
    merchantID!: i64;
    @alias("merchant_type")
    merchantType!: string;
    name!: Name;
    location!: Location;
    coordinate!: Coordinate;
    distance!: Distance;
    cuisines!: Array<Cuisine> | null;
    currency!: Currency;
    rating!: Rating;
    price!: PriceRating;
    @alias("preparation_time")
    preparationTime!: i32;
    promotions!: Array<Promotion> | null;
    link!: string;
    menu!: Menu;
    @alias("superapp_link")
    superappLink!: string;
    @alias("image_url")
    imageUrl!: string;
    @alias("logo_url")
    logoUrl!: string;
    @alias("min_order")
    minOrder!: i32;
    delivery!: Delivery;
    @alias("has_items")
    hasItems!: boolean;
    tags!: Array<Tag>;
    @alias("include_tax")
    includeTax!: boolean;
    @alias("contract_id")
    contractid!: i64;
    @alias("included_tax")
    includedTax!: i32;
    @alias("business_type")
    businessType!: string;
    @alias("menu_layout")
    menuLayout!: string;
    @alias("item_count")
    itemCount!: i32;
    @alias("delivery_zones")
    deliveryZones!: Array<string> | null;
    @alias("food_zones_enabled")
    foodZonesEnabled!: boolean;
    brand!: Brand;
    @alias("brand_id")
    brandId!: i64;
    @alias("is_new")
    isNew!: boolean;
    @alias("order_count")
    orderCount!: OrderCount;
    @alias("merchant_sub_text")
    merchantSubText!: Array<MerchantSubText> | null;
    @alias("availability_details")
    availabilityDetails!: AvailabilityDetails;
    @alias("customer_name")
    customerName!: string;
}

snaffi avatar Jan 13 '25 06:01 snaffi