使用JSON

时间:2018-04-30 23:15:45

标签: python json api

我还是Python的新手,我仍然在这方面尝试了很多新东西。我正在使用包含JSON数据的API,如下所示:

products: [
{
id: 66057248,
createdAt: "2018-02-28T14:55:22+01:00",
updatedAt: "2018-04-26T20:44:12+02:00",
isVisible: true,
visibility: "visible",
hasMatrix: false,
data01: "",
data02: "",
data03: "",
url: "product-name",
title: "product name",
fulltitle: "product name",
    etc...

我现在要做的是让用户提供他想要相互比较的JSON文件中的值的输入。我尝试了几件事,但到目前为止没有结果。我可能做了一些愚蠢的事,但我不知道是什么。

正如您在下面的代码中所看到的,我向用户询问了两次输入,这些值是我想要添加到下面的for循环中的值。我现在的问题是,我做错了什么以及如何在for循环中插入输入数据?

import requests
import json

response = requests.get('http://inserturlhere.com')

data =response.text
parsed=json.loads(data)

first_value = input ('Name of first value: ')
second_value = input ('Name of second value: ')

first_test = ['first_value']
second_test = ['second_value']

for product in parsed['products']:
    if product[first_test] == product[second_test] :
        print(product['id'])

2 个答案:

答案 0 :(得分:1)

目前尚不清楚first_testsecond_test在您的代码中的用途。但这可能是你想要做的吗?

import requests

response = requests.get('http://inserturlhere.com')
products = response.json()['products']

first_value = input('Name of first value: ')
second_value = input('Name of second value: ')

for product in products:
    if product[first_value] == product[second_value]:
        print(product['id'])

请注意,first_value或second_value的用户输入中的任何拼写错误都将导致KeyError,因此您应该使用try-except包含som错误处理。

答案 1 :(得分:1)

以下是使用最少数据的几种解决方案。您的代码无效的主要原因是您引入了不必要的变量first_testsecond_test

这假设,如您的问题中所述,您希望在给定2个参数输入的情况下测试json中2个值的相等性。

<强>设置

products = [{'id': 545453435453,
             'title': "product name",
             'fulltitle': "product name"},
            {'id': 123454686786,
             'title': "product name2",
             'fulltitle': "product name3"}]

first_value = input('Name of first value: ')
second_value = input('Name of second value: ')

解决方案1:迭代

for product in products:
    if product[first_value] == product[second_value] :
        print(product['id'])

# Name of first value: title
# Name of second value: fulltitle
# 545453435453

解决方案2:pandas

这涉及第三方库pandas,这对于重复呼叫会更有效。

import pandas as pd

df = pd.DataFrame(products)

res = df[df[first_value] == df[second_value]]

# Name of first value: title
# Name of second value: fulltitle
#
#       fulltitle            id         title
# 0  product name  545453435453  product name
相关问题