У меня проблема что код меняет структуру файла.

_Snake_

Участник
Автор темы
40
2
У меня код меняет структуру файла, а должен менять только prisec в файле.
Вот такая должна быть структура
[{"count_maximum":0,"price":"8000","price_vc":10,"position_tab":1,"count":493,"enabled":true,"maximum":false,"name":"Гражданский талон"}, и т.д

Код:
import json
import tkinter as tk
from tkinter import filedialog, messagebox
import chardet

def detect_encoding(file_path):
    with open(file_path, 'rb') as file:
        raw_data = file.read()
        result = chardet.detect(raw_data)
        return result['encoding']

def load_json_file(file_path):
    try:
        encoding = detect_encoding(file_path)
        with open(file_path, 'r', encoding=encoding) as file:
            return json.load(file)
    except json.JSONDecodeError as e:
        messagebox.showerror("Ошибка", f"Ошибка декодирования JSON: {e}")
        return None
    except Exception as e:
        messagebox.showerror("Ошибка", f"Ошибка при загрузке файла: {e}")
        return None

def save_json_file(file_path, data):
    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            json.dump(data, file, ensure_ascii=False, indent=4)
        messagebox.showinfo("Успех", f"Данные успешно сохранены в файл: {file_path}")
    except Exception as e:
        messagebox.showerror("Ошибка", f"Ошибка при сохранении файла: {e}")

def update_prices(target_file_path, prices_file_path):
    target_data = load_json_file(target_file_path)
    if target_data is None:
        return

    prices_data = load_json_file(prices_file_path)
    if prices_data is None:
        return

    prices_dict = {}
    for item_name, item_data in prices_data['list'].items():
        if 'sa' in item_data and 'price' in item_data['sa']:
            prices_dict[item_name] = item_data['sa']['price']
        else:
            messagebox.showwarning("Предупреждение", f"Некорректная структура данных для товара '{item_name}' в файле с ценами.")

    for item in target_data:
        if item['name'] in prices_dict:
            item['price'] = prices_dict[item['name']]

    save_json_file(target_file_path, target_data)

def select_target_file():
    file_path = filedialog.askopenfilename(title="Выберите файл для обновления цен", filetypes=[("JSON files", "*.json")])
    if file_path:
        target_file_entry.delete(0, tk.END)
        target_file_entry.insert(0, file_path)

def select_prices_file():
    file_path = filedialog.askopenfilename(title="Выберите файл с ценами", filetypes=[("JSON files", "*.json")])
    if file_path:
        prices_file_entry.delete(0, tk.END)
        prices_file_entry.insert(0, file_path)
        with open('prices_file_path.txt', 'w', encoding='utf-8') as file:
            file.write(file_path)

def on_update_click():
    target_file_path = target_file_entry.get()
    prices_file_path = prices_file_entry.get()
    if target_file_path and prices_file_path:
        update_prices(target_file_path, prices_file_path)
    else:
        messagebox.showwarning("Предупреждение", "Пожалуйста, выберите оба файла.")

def load_prices_file_path():
    try:
        with open('prices_file_path.txt', 'r', encoding='utf-8') as file:
            prices_file_path = file.read().strip()
            if prices_file_path:
                prices_file_entry.delete(0, tk.END)
                prices_file_entry.insert(0, prices_file_path)
    except FileNotFoundError:
        pass

root = tk.Tk()
root.title("Обновление цен")

frame = tk.Frame(root)
frame.pack(padx=10, pady=10)

target_file_label = tk.Label(frame, text="Выберите файл для обновления цен:")
target_file_label.grid(row=0, column=0, padx=5, pady=5)

target_file_entry = tk.Entry(frame, width=50)
target_file_entry.grid(row=0, column=1, padx=5, pady=5)

target_file_button = tk.Button(frame, text="Обзор", command=select_target_file)
target_file_button.grid(row=0, column=2, padx=5, pady=5)

prices_file_label = tk.Label(frame, text="Выберите файл с ценами:")
prices_file_label.grid(row=1, column=0, padx=5, pady=5)

prices_file_entry = tk.Entry(frame, width=50)
prices_file_entry.grid(row=1, column=1, padx=5, pady=5)

prices_file_button = tk.Button(frame, text="Обзор", command=select_prices_file)
prices_file_button.grid(row=1, column=2, padx=5, pady=5)

update_button = tk.Button(frame, text="Обновить цены", command=on_update_click)
update_button.grid(row=2, column=0, columnspan=3, pady=10)

load_prices_file_path()

root.mainloop()
 

Макаров

Новичок
21
4
Твой код работает отлично, посмотри на начальную структуру, посмотри чтобы ты точно отправлял нужные файлы.
Проверь работу данного кода, он должен тебе в 300kk.json поменять цену подарка, в первую строку gui передай 300kk.json
tt:
import json
import tkinter as tk
from tkinter import filedialog, messagebox
import chardet

def detect_encoding(file_path):
    with open(file_path, 'rb') as file:
        raw_data = file.read()
        result = chardet.detect(raw_data)
        return result['encoding']

def load_json_file(file_path):
    try:
        encoding = detect_encoding(file_path)
        with open(file_path, 'r', encoding=encoding) as file:
            return json.load(file)
    except json.JSONDecodeError as e:
        messagebox.showerror("Ошибка", f"Ошибка декодирования JSON: {e}")
        return None
    except Exception as e:
        messagebox.showerror("Ошибка", f"Ошибка при загрузке файла: {e}")
        return None

def save_json_file(file_path, data):
    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            json.dump(data, file, ensure_ascii=False, indent=4)
        messagebox.showinfo("Успех", f"Данные успешно сохранены в файл: {file_path}")
    except Exception as e:
        messagebox.showerror("Ошибка", f"Ошибка при сохранении файла: {e}")

def update_prices(target_file_path, prices_file_path):
    target_data = load_json_file(target_file_path)
    print(target_data)
    if target_data is None:
        return

    # prices_data = load_json_file(prices_file_path)
    prices_data = {'list':{'Подарок':{'sa':{'price':12}}}}
    if prices_data is None:
        return

    prices_dict = {}
    for item_name, item_data in prices_data['list'].items():
        if 'sa' in item_data and 'price' in item_data['sa']:
            prices_dict[item_name] = item_data['sa']['price']
        else:
            messagebox.showwarning("Предупреждение", f"Некорректная структура данных для товара '{item_name}' в файле с ценами.")

    for item in target_data:
        if item['name'] in prices_dict:
            item['price'] = prices_dict[item['name']]

    save_json_file(target_file_path, target_data)

def select_target_file():
    file_path = filedialog.askopenfilename(title="Выберите файл для обновления цен", filetypes=[("JSON files", "*.json")])
    if file_path:
        target_file_entry.delete(0, tk.END)
        target_file_entry.insert(0, file_path)

def select_prices_file():
    file_path = filedialog.askopenfilename(title="Выберите файл с ценами", filetypes=[("JSON files", "*.json")])
    if file_path:
        prices_file_entry.delete(0, tk.END)
        prices_file_entry.insert(0, file_path)
        with open('prices_file_path.txt', 'w', encoding='utf-8') as file:
            file.write(file_path)

def on_update_click():
    target_file_path = target_file_entry.get()
    prices_file_path = prices_file_entry.get()
    if target_file_path and prices_file_path:
        update_prices(target_file_path, prices_file_path)
    else:
        messagebox.showwarning("Предупреждение", "Пожалуйста, выберите оба файла.")

def load_prices_file_path():
    try:
        with open('prices_file_path.txt', 'r', encoding='utf-8') as file:
            prices_file_path = file.read().strip()
            if prices_file_path:
                prices_file_entry.delete(0, tk.END)
                prices_file_entry.insert(0, prices_file_path)
    except FileNotFoundError:
        pass

root = tk.Tk()
root.title("Обновление цен")

frame = tk.Frame(root)
frame.pack(padx=10, pady=10)

target_file_label = tk.Label(frame, text="Выберите файл для обновления цен:")
target_file_label.grid(row=0, column=0, padx=5, pady=5)

target_file_entry = tk.Entry(frame, width=50)
target_file_entry.grid(row=0, column=1, padx=5, pady=5)

target_file_button = tk.Button(frame, text="Обзор", command=select_target_file)
target_file_button.grid(row=0, column=2, padx=5, pady=5)

prices_file_label = tk.Label(frame, text="Выберите файл с ценами:")
prices_file_label.grid(row=1, column=0, padx=5, pady=5)

prices_file_entry = tk.Entry(frame, width=50)
prices_file_entry.grid(row=1, column=1, padx=5, pady=5)

prices_file_button = tk.Button(frame, text="Обзор", command=select_prices_file)
prices_file_button.grid(row=1, column=2, padx=5, pady=5)

update_button = tk.Button(frame, text="Обновить цены", command=on_update_click)
update_button.grid(row=2, column=0, columnspan=3, pady=10)

load_prices_file_path()

root.mainloop()
 

_Snake_

Участник
Автор темы
40
2
А можно что бы все цени он поменял? Что бы я скинул просто файл с ценами и файл где нужно изменить prices, он везде поменял цену.
Просто когда скрипт меняет цени, меняется структура файла
Вот идин из примеров.


[
{
"count_maximum": 0,
"price": 17200,
"price_vc": 10,
"position_tab": 1,
"count": 493,
"enabled": true,
"maximum": false,
"name": "Гражданский талон"
},
{
"count_maximum": 0,
"price": 23600,
"price_vc": 10,
"position_tab": 2,
"count": 171,
"enabled": true,
"maximum": false,
"name": "Семейный талон"
},
 

Макаров

Новичок
21
4
Даже не знаю, у меня все работает

Python:
import json
import tkinter as tk
from tkinter import filedialog, messagebox
import chardet

def detect_encoding(file_path):
    with open(file_path, 'rb') as file:
        raw_data = file.read()
        result = chardet.detect(raw_data)
        return result['encoding']

def load_json_file(file_path):
    try:
        encoding = detect_encoding(file_path)
        with open(file_path, 'r', encoding=encoding) as file:
            return json.load(file)
    except json.JSONDecodeError as e:
        messagebox.showerror("Ошибка", f"Ошибка декодирования JSON: {e}")
        return None
    except Exception as e:
        messagebox.showerror("Ошибка", f"Ошибка при загрузке файла: {e}")
        return None

def save_json_file(file_path, data):
    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            json.dump(data, file, ensure_ascii=False, indent=4)
        messagebox.showinfo("Успех", f"Данные успешно сохранены в файл: {file_path}")
    except Exception as e:
        messagebox.showerror("Ошибка", f"Ошибка при сохранении файла: {e}")

def update_prices(target_file_path, prices_file_path):
    target_data = load_json_file(target_file_path)
    if target_data is None:
        return

    prices_data = load_json_file(prices_file_path)
    if prices_data is None:
        return

    prices_dict = {}
    for item_name, item_data in prices_data['list'].items():
        if 'sa' in item_data and 'price' in item_data['sa']:
            prices_dict[item_name] = item_data['sa']['price']
        else:
            messagebox.showwarning("Предупреждение", f"Некорректная структура данных для товара '{item_name}' в файле с ценами.")

    for item in target_data:
        if item['name'] in prices_dict:
            item['price'] = prices_dict[item['name']]

    save_json_file(target_file_path, target_data)

def select_target_file():
    file_path = filedialog.askopenfilename(title="Выберите файл для обновления цен", filetypes=[("JSON files", "*.json")])
    if file_path:
        target_file_entry.delete(0, tk.END)
        target_file_entry.insert(0, file_path)

def select_prices_file():
    file_path = filedialog.askopenfilename(title="Выберите файл с ценами", filetypes=[("JSON files", "*.json")])
    if file_path:
        prices_file_entry.delete(0, tk.END)
        prices_file_entry.insert(0, file_path)
        with open('prices_file_path.txt', 'w', encoding='utf-8') as file:
            file.write(file_path)

def on_update_click():
    target_file_path = target_file_entry.get()
    prices_file_path = prices_file_entry.get()
    if target_file_path and prices_file_path:
        update_prices(target_file_path, prices_file_path)
    else:
        messagebox.showwarning("Предупреждение", "Пожалуйста, выберите оба файла.")

def load_prices_file_path():
    try:
        with open('prices_file_path.txt', 'r', encoding='utf-8') as file:
            prices_file_path = file.read().strip()
            if prices_file_path:
                prices_file_entry.delete(0, tk.END)
                prices_file_entry.insert(0, prices_file_path)
    except FileNotFoundError:
        pass

root = tk.Tk()
root.title("Обновление цен")

frame = tk.Frame(root)
frame.pack(padx=10, pady=10)

target_file_label = tk.Label(frame, text="Выберите файл для обновления цен:")
target_file_label.grid(row=0, column=0, padx=5, pady=5)

target_file_entry = tk.Entry(frame, width=50)
target_file_entry.grid(row=0, column=1, padx=5, pady=5)

target_file_button = tk.Button(frame, text="Обзор", command=select_target_file)
target_file_button.grid(row=0, column=2, padx=5, pady=5)

prices_file_label = tk.Label(frame, text="Выберите файл с ценами:")
prices_file_label.grid(row=1, column=0, padx=5, pady=5)

prices_file_entry = tk.Entry(frame, width=50)
prices_file_entry.grid(row=1, column=1, padx=5, pady=5)

prices_file_button = tk.Button(frame, text="Обзор", command=select_prices_file)
prices_file_button.grid(row=1, column=2, padx=5, pady=5)

update_button = tk.Button(frame, text="Обновить цены", command=on_update_click)
update_button.grid(row=2, column=0, columnspan=3, pady=10)

load_prices_file_path()

root.mainloop()
 

Макаров

Новичок
21
4
А можешь показать результат?
Изменил цену подарка на 12, см. 132-141 строку
подарок:
[
    {
        "count": 493,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Гражданский талон",
        "position_tab": 1,
        "price": 17200,
        "price_vc": 10
    },
    {
        "count": 171,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Семейный талон",
        "position_tab": 2,
        "price": 23600,
        "price_vc": 10
    },
    {
        "count": 2,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Скидочный талон",
        "position_tab": 3,
        "price": 2170000,
        "price_vc": 10
    },
    {
        "count": 439,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Бронзовая рулетка",
        "position_tab": 4,
        "price": 14000,
        "price_vc": 10
    },
    {
        "count": 58,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Серебряная рулетка",
        "position_tab": 5,
        "price": 80700,
        "price_vc": 10
    },
    {
        "count": 17,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Золотая рулетка",
        "position_tab": 6,
        "price": 282000,
        "price_vc": 10
    },
    {
        "count": 8,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Платиновая рулетка",
        "position_tab": 7,
        "price": 542000,
        "price_vc": 10
    },
    {
        "count": 219,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Камень",
        "position_tab": 8,
        "price": 24500,
        "price_vc": 10
    },
    {
        "count": 50,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Металл",
        "position_tab": 9,
        "price": 81500,
        "price_vc": 10
    },
    {
        "count": 51,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Бронза",
        "position_tab": 10,
        "price": 79600,
        "price_vc": 10
    },
    {
        "count": 263,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Серебро",
        "position_tab": 11,
        "price": 20500,
        "price_vc": 10
    },
    {
        "count": 15,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Алюминий",
        "position_tab": 12,
        "price": 318000,
        "price_vc": 10
    },
    {
        "count": 87,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Золото",
        "position_tab": 13,
        "price": 56000,
        "price_vc": 10
    },
    {
        "count": 168,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Подарок",
        "position_tab": 14,
        "price": 12,
        "price_vc": 10
    },
    {
        "count": 24,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец с премией",
        "position_tab": 15,
        "price": 174000,
        "price_vc": 10
    },
    {
        "count": 23,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец Олигарха",
        "position_tab": 16,
        "price": 215000,
        "price_vc": 10
    },
    {
        "count": 15,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец крафтера",
        "position_tab": 17,
        "price": 338000,
        "price_vc": 10
    },
    {
        "count": 12,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец дальнобойщика",
        "position_tab": 18,
        "price": 333000,
        "price_vc": 10
    },
    {
        "count": 52,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец Mortal Combat",
        "position_tab": 19,
        "price": 90400,
        "price_vc": 10
    },
    {
        "count": 18,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец Водителя Автобуса",
        "position_tab": 20,
        "price": 284000,
        "price_vc": 10
    },
    {
        "count": 25,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец рыболова",
        "position_tab": 21,
        "price": 213000,
        "price_vc": 10
    },
    {
        "count": 32,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Рандомный Ларец",
        "position_tab": 22,
        "price": 173000,
        "price_vc": 10
    },
    {
        "count": 6,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец пилота",
        "position_tab": 23,
        "price": 805000,
        "price_vc": 10
    },
    {
        "count": 19,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец развозчика продуктов",
        "position_tab": 24,
        "price": 232000,
        "price_vc": 10
    },
    {
        "count": 21,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец кладоискателя",
        "position_tab": 25,
        "price": 213000,
        "price_vc": 10
    },
    {
        "count": 35,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец Tidex",
        "position_tab": 26,
        "price": 140000,
        "price_vc": 10
    },
    {
        "count": 60,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ящик Marvel",
        "position_tab": 27,
        "price": 79300,
        "price_vc": 10
    },
    {
        "count": 60,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ящик Джентельменов",
        "position_tab": 28,
        "price": 98500,
        "price_vc": 10
    },
    {
        "count": 60,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ящик Minecraft",
        "position_tab": 29,
        "price": 92400,
        "price_vc": 10
    },
    {
        "count": 34,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Супер мото-ящик",
        "position_tab": 30,
        "price": 163000,
        "price_vc": 10
    },
    {
        "count": 18,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Супер авто-ящик",
        "position_tab": 31,
        "price": 310000,
        "price_vc": 10
    },
    {
        "count": 18,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ностальгический ящик",
        "position_tab": 32,
        "price": 276000,
        "price_vc": 10
    },
    {
        "count": 9,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Super Car Box",
        "price": 468000,
        "price_vc": 10
    },
    {
        "count": 9,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Concept Car Luxury",
        "price": 447000,
        "price_vc": 10
    },
    {
        "count": 790,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Талон для охранника: +1 EXP",
        "position_tab": 35,
        "price": 7190,
        "price_vc": 10
    },
    {
        "count": 131,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Точильный камень",
        "position_tab": 36,
        "price": 48100,
        "price_vc": 10
    },
    {
        "count": 21,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Зловещая монета",
        "position_tab": 37,
        "price": 223000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Распредвал (sport)",
        "position_tab": 38,
        "price": 2250000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Турбокомпрессор (sport)",
        "position_tab": 39,
        "price": 2280000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Нагнетатель (sport)",
        "position_tab": 40,
        "price": 2200000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Сцепление (sport)",
        "position_tab": 41,
        "price": 2230000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "КПП (sport)",
        "position_tab": 42,
        "price": 2230000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Дифференциал (sport)",
        "position_tab": 43,
        "price": 2230000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Подвеска (sport)",
        "position_tab": 44,
        "price": 2190000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Коленвал (sport)",
        "position_tab": 45,
        "price": 2220000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Тормоза (sport)",
        "position_tab": 46,
        "price": 2220000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Переносной ларек (1)",
        "position_tab": 47,
        "price": 3290000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Переносной ларек (2)",
        "position_tab": 48,
        "price": 3610000,
        "price_vc": 10
    },
    {
        "count": 2,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Переносной ларек (3)",
        "position_tab": 49,
        "price": 5020000,
        "price_vc": 10
    },
    {
        "count": 5268,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Бандитский респект",
        "position_tab": 50,
        "price": 88900,
        "price_vc": 10
    },
    {
        "count": 9878,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Дрова",
        "position_tab": 51,
        "price": 4170,
        "price_vc": 10
    },
    {
        "count": 141,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Древесина высшего качества",
        "position_tab": 52,
        "price": 29300,
        "price_vc": 10
    },
    {
        "count": 790,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Счастливая травка",
        "position_tab": 53,
        "price": 6420,
        "price_vc": 10
    },
    {
        "count": 98,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Жареное мясо оленины",
        "position_tab": 54,
        "price": 65500,
        "price_vc": 10
    },
    {
        "count": 112,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Тушка оленя",
        "position_tab": 55,
        "price": 42100,
        "price_vc": 10
    },
    {
        "count": 5199,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Череп",
        "position_tab": 56,
        "price": [
            2300,
            800000
        ],
        "price_vc": 10
    },
    {
        "count": 34,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Одежда из секонд-хенда",
        "position_tab": 57,
        "price": 150000,
        "price_vc": 10
    },
    {
        "count": 2634,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Семейная монета",
        "position_tab": 58,
        "price": 1880,
        "price_vc": 10
    },
    {
        "count": 15805,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Монета охотника",
        "position_tab": 59,
        "price": 2040,
        "price_vc": 10
    },
    {
        "count": 1317,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Лён",
        "price": 4290,
        "price_vc": 10
    },
    {
        "count": 1317,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Хлопок",
        "position_tab": 61,
        "price": 4590,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Вечная рабочая виза",
        "position_tab": 62,
        "price": 7460000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Twin Turbo",
        "price": 13100000,
        "price_vc": 10
    },
    {
        "count": 21,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец Vice City",
        "position_tab": 64,
        "price": 224000,
        "price_vc": 10
    },
    {
        "count": 10,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец хэллоуина 2022",
        "position_tab": 65,
        "price": 501000,
        "price_vc": 10
    },
    {
        "count": 9,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец петуха",
        "position_tab": 66,
        "price": 592000,
        "price_vc": 10
    },
    {
        "count": 14,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец семейных охранников",
        "position_tab": 67,
        "price": 318000,
        "price_vc": 10
    },
    {
        "count": 8,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец инкассатора",
        "position_tab": 68,
        "price": 558000,
        "price_vc": 10
    },
    {
        "count": 14,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец Fortnite",
        "position_tab": 69,
        "price": 348000,
        "price_vc": 10
    },
    {
        "count": 24,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Точильный амулет",
        "position_tab": 70,
        "price": 198000,
        "price_vc": 10
    },
    {
        "count": 8,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Кусок редкой ткани",
        "position_tab": 71,
        "price": 404000,
        "price_vc": 10
    },
    {
        "count": 32,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Rare Box Blue",
        "price": 175000,
        "price_vc": 10
    },
    {
        "count": 32,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Rare Box Yellow",
        "price": 167000,
        "price_vc": 10
    },
    {
        "count": 32,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Rare Box Red",
        "price": 169000,
        "price_vc": 10
    },
    {
        "count": 4,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Смазка для разгона видеокарты",
        "position_tab": 75,
        "price": 1140000,
        "price_vc": 10
    },
    {
        "count": 18,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Охлаждающая жидкость для видеокарты",
        "position_tab": 76,
        "price": 288000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Заточка для бронежилета",
        "position_tab": 77,
        "price": 1210000,
        "price_vc": 10
    },
    {
        "count": 7,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Алмазный камень",
        "position_tab": 78,
        "price": 652000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Ларец Arizona",
        "position_tab": 79,
        "price": 1890000,
        "price_vc": 10
    },
    {
        "count": 10,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Пасхальный ларец 2024",
        "position_tab": 80,
        "price": 446000,
        "price_vc": 10
    },
    {
        "count": 14,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Супер охлаждающая жидкость для видеокарты",
        "position_tab": 81,
        "price": 346000,
        "price_vc": 10
    },
    {
        "count": 35,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Рыбная монета",
        "position_tab": 82,
        "price": 144000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Улучшение для автомобиля",
        "position_tab": 83,
        "price": 7490000,
        "price_vc": 10
    },
    {
        "count": 79,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "AZ-Монеты (Передаваемые)",
        "position_tab": 84,
        "price": 57800,
        "price_vc": 10
    },
    {
        "count": 1,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Темная материя",
        "position_tab": 85,
        "price": 4280000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Тормоза (sport+)",
        "position_tab": 86,
        "price": 7960000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Коленвал (sport+)",
        "position_tab": 87,
        "price": 8530000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Подвеска (sport+)",
        "position_tab": 88,
        "price": 7940000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Дифференциал (sport+)",
        "position_tab": 89,
        "price": 8490000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Турбокомпрессор (sport+)",
        "position_tab": 90,
        "price": 8560000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Распредвал (sport+)",
        "position_tab": 91,
        "price": 8530000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "КПП (sport+)",
        "position_tab": 92,
        "price": 8460000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Нагнетатель (sport+)",
        "position_tab": 93,
        "price": 8490000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Сцепление (sport+)",
        "position_tab": 94,
        "price": 8370000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Чип-тюнинг (STAGE 3)",
        "position_tab": 95,
        "price": 18000000,
        "price_vc": 10
    },
    {
        "count": 3,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Уголь",
        "position_tab": 96,
        "price": 1320000,
        "price_vc": 10
    },
    {
        "count": 4390,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Шкура оленя",
        "position_tab": 97,
        "price": 2950,
        "price_vc": 10
    },
    {
        "count": 1,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Шахтерский сплав",
        "position_tab": 98,
        "price": 5240000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Прочная ткань",
        "position_tab": 99,
        "price": 18300000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Продажа фишек без комиссии",
        "position_tab": 100,
        "price": 8970000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Наклейка Суприм",
        "position_tab": 101,
        "price": 8570000,
        "price_vc": 10
    },
    {
        "count": 0,
        "count_maximum": 0,
        "enabled": true,
        "maximum": false,
        "name": "Неоновая подсветка (настраиваемая)",
        "position_tab": 102,
        "price": 27100000,
        "price_vc": 10
    }
]