Получение правильных значений из JSON с помощью Python

#python #arrays #json

#python #массивы #json

Вопрос:

У меня есть этот файл json

https://pastebin.com/embed_js/PknXEGq2

и вот мой код до сих пор

 import json

data = json.load(open('data.json'))

Product = []
Products = []

def get_products():
    query_one = data['Bundles']
    for first in query_one:
        Product = first.get('Product') or []
        for i in Product:
            for key, val in i.items():
                if key == None :
                    print(i.index(key)   key)
                elif key is False:
                 print("Error")
                else:
                 print("You can buy "   str(key)   " at our store at "   str(val))
                 
    Products = data['Bundles']
    var_two = Products
    for second in Products:
        var_two = second.get('Products')
        for j in var_two:
            for key_two, val_two in j.items():
                if key_two == None:
                    print(j.index(key_two)   key_two)
                elif key_two is False:
                    print("Error")
                else:
                    print("You can buy "   str(key_two)   " at our store at "   str(val_two))
    return ""

get_products()
 

Проблема в том, что я не могу получить правильные значения и ключи для некоторых, так как я могу указать правильные элементы (название продукта и цену) Я хочу получить из файла json

Результат должен быть

Вы можете купить Tommee Tippee Ctn Transition Cup в нашем магазине по цене 12

Комментарии:

1. Можете ли вы добавить пример фактического вывода, который вам нужен?

2. Вы можете купить Tommee Tippee Ctn Transition Cup в нашем магазине по цене 12

Ответ №1:

 import json
import sys
import os
data = json.load(open(os.path.dirname(sys.argv[0]) '/file.json'))

Product = []
Products = []

def get_products():
    query_one = data['Bundles']
    
    for first in query_one:
        Product = first.get('Product') or []
        for i in Product:
            name = ""
            price = ""
            for key, val in i.items():
            
                if key == None :
                    pass
                elif key=="Price":
                    price = val
                    
                elif key=="Name":
                    name = val
            print ("You can buy "   str(name)   " at the price  "   str(price))
                

get_products()
 

Это первый элемент, и это вывод:

 You can buy Tommee Tippee Ctn Transition Cup at the price  12
 

Ответ №2:

Я переписал ваш код. Пожалуйста, проверьте, выполняет ли он вашу задачу :

 import json

data = json.load(open('data.json'))

ignore_values = ["Size 6-12m amp; 1-2y", " 6-11kg Girl"]

def get_products():
    bundles = data.get("Bundles")
    for bundle in bundles:
        
        products = bundle.get("Product")
        if products:
            for product in products:
                product_name = product.get("Name", '')
                product_price = product.get("Price", '')
                if any(ignore_value in product_name for ignore_value in ignore_values):
                    for ignore_value in ignore_values:
                        product_name = product_name.replace(ignore_value, '')
                print("You can buy {0} Ctn Transition Cup at our store at {1}".format(product_name, product_price))

        products = bundle.get("Products")
        if products:
            for product in products:
                product_name = product.get("Name", '')
                product_price = product.get("Price", '')
                if any(ignore_value in product_name for ignore_value in ignore_values):
                    for ignore_value in ignore_values:
                        product_name = product_name.replace(ignore_value, '')
                print("You can buy {0} Ctn Transition Cup at our store at {1}".format(product_name, product_price))
                 

            
get_products()
 

Комментарии:

1. Это действительно помогло, спасибо, у меня есть еще один вопрос, можно ли удалить «Размер 6-12 м и 1-2 года» и «Девочка весом 6-11 кг» из некоторых продуктов, я имею в виду дополнительное описание в названии этих продуктов

2. Я обновил код. Вы можете добавить то, что вам нужно удалить, в ignore_values список и проверить.