Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用JSON用户输入填充for循环_Python_Json_Api - Fatal编程技术网

Python 使用JSON用户输入填充for循环

Python 使用JSON用户输入填充for循环,python,json,api,Python,Json,Api,我还是Python新手,在这方面我仍在尝试很多新东西。我使用的API包含JSON数据,如下所示: 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: "",

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

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'])

不清楚您的代码中第一次测试和第二次测试的目的是什么。但这可能是你想要做的吗

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'])

请注意,用户输入的第一个\u值或第二个\u值中的任何拼写错误都将导致KeyError,因此您可能应该在try except中包含som错误处理

下面是一些使用最少数据的解决方案。代码不起作用的主要原因是引入了不必要的变量
first\u test
second\u 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
,它对于重复调用更有效

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

你能提供一份工作吗?json代码段不完整,
请求。get('apirl')
不会运行,我们也不知道
解析['orders']
指的是什么。由于缺乏上下文,这在很大程度上是对您意图的猜测,但当您编写“first_test'=['first_value']时,这对第一个值中的var没有任何作用。@jpp对我的帖子做了一些调整,如果我使用了参数,那么代码就可以工作了。比如说,在第一个输入“第一个值”中,我填写了“标题”,在第二个输入中填写了“完整标题”。我希望在循环中,这两个值将相互比较。只有当我的for循环看起来像这样时,这才有效:对于解析的['orders']中的产品:如果产品['title']==product['full_title']:print(产品['id']),但正如您所看到的,这是静态的,我想让它成为动态的,让用户决定他想要比较的值。@Solaiman,仍然困惑,
解析的['orders']
?[你能打印一个例子吗]第一次也是唯一一次出现
订单
是在最后第三行。@jpp我的错误,我现在已经更改了。这是它应该如何尝试上面的代码,但我得到了一个关键的错误,即使我填写的一切权利。这就是为什么我尝试使用first_test和second_test将这两个输入转换为与print(product['id'])相同的格式,希望它能够工作。如果出现密钥错误,那么显然您没有填写有效的密钥名称。你到底犯了什么错误?啊,我现在觉得自己很愚蠢。如果我看我的第一段代码的话,我真的很接近。你是对的,你的解决方案是有效的。谢谢我以前没有和熊猫合作过,但我会看看。我查看了您的解决方案,但这样我就必须在代码中声明从API接收到的值—查看您的设置?@Solaiman,不,您没有-请参阅更新。两种解决方案的设置部分保持不变。感谢您的帮助!我不能选择你的两个答案作为解决方案。但是你的帖子投了赞成票:)@Solaiman,没问题,你接受了正确的答案。。这才是最重要的!