我有以下类型的"list2"
文件(方式更大但这只是一个示例),其中我必须检索的关键元素是{
"category": "game",
"list2":
{
"usage_rank": 1,
"product_id": 203446,
"product_name": "Ninja",
},
{
"usage_rank": 6,
"product_id": 564446,
"product_name": "Samourai",
},
"granularity": "monthly",
"segment": "all_users",
}
属于"product_id"
(其中基于测试,似乎是一系列元素/项目的数组(不知道单词" items"是否适合):
API
基本上我需要提取所有"product_id"
,以便进行第二次json_data = json.loads(response.text)
i=0
print(i)
type(i)
for i in json_data["list"][i]["product_id"]:
checkID=json_data["list"][i]["product_id"]
print(checkID)
i=i+1
调用,该调用会将此ID信息作为URL的一部分。
我尝试了各种各样的事情,包括循环使用方法" get",还尝试将Json结果存储到ndarray中?
是否有必要确保有效地重复使用这些信息? 我在列表,字典之间感到很困惑。
我有常规的语法错误(似乎我无法正确读取索引),或者当我不再有语法错误时,似乎我的循环只存储了第一个TypeError: 'int' object is not iterable
,它不会转到第二个。
在一天结束时,当我尝试循环时,我也有一个语法错误:
"product_id"
我明白了:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_second"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/editTextlastname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="lastname"
android:layout_marginTop="15dp"
android:paddingBottom="1000dp"
android:inputType="text"/>
</RelativeLayout>
</ScrollView>
但也许有一种更简单的方法来正确提取和保存public function reportPost(Request $request) {
$postreport = new postreport();
$postreport->PostId = input::get('id');
$postreport->UserId = session()->get('userid');
$postreport->reasonId = $_POST('optradio');
$postreport->save();
return redirect('posts');
}
信息?
答案 0 :(得分:0)
如果你已正确格式化json:
{
"category": "game",
"list2":[
{
"usage_rank": 1,
"product_id": 203446,
"product_name": "Ninja"
},
{
"usage_rank": 6,
"product_id": 564446,
"product_name": "Samourai"
}],
"granularity": "monthly",
"segment": "all_users",
}
然后关注应该可以正常地从list2中抓取product_id
:
i = 2
for each in json_data['list'+str(i)]:
print each['product_id']
答案 1 :(得分:0)
首先,确保你的JSON是正确的,因为你的例子中缺少你(我猜)对象数组中的方括号。
注意:您可能会也可能不会使用enumerate
功能。这取决于你:)
以下是如何使用对象进行迭代:
json_data = {
"category": "game",
"list2":[{
"usage_rank": 1,
"product_id": 203446,
"product_name": "Ninja",
},
{
"usage_rank": 6,
"product_id": 564446,
"product_name": "Samourai",
}],
"granularity": "monthly",
"segment": "all_users",
}
for n, x in enumerate(json_data['list2'], 1):
print(n, x['product_id'])
答案 2 :(得分:0)
当您修复json数据并假设list2
实际上是list
个dicts时,我们可以使用以下代码来访问product_id
值。
<强>代码:强>
s = '''{
"category": "game",
"list2":
[{
"usage_rank": 1,
"product_id": 203446,
"product_name": "Ninja"
},
{
"usage_rank": 6,
"product_id": 564446,
"product_name": "Samourai"
}],
"granularity": "monthly",
"segment": "all_users"
}'''
import json
data = json.loads(s)
print(data['list2'][0])
print(data['list2'][1])
print(data['list2'][0]['product_id'])
print(data['list2'][1]['product_id'])
<强>输出:强>
{'product_name': 'Ninja', 'product_id': 203446, 'usage_rank': 1}
{'product_name': 'Samourai', 'product_id': 564446, 'usage_rank': 6}
203446
564446
使用循环结构:
for product in data['list2']:
print(product['product_id'])
<强>输出:强>
203446
564446
答案 3 :(得分:-1)
问题(除了你的略有格式错误的json以及list
属性实际上在其中缺失的事实)是你有两个变量i
,计数器和列表中的迭代器,你必须区分它们:
json_data = json.loads(response.text)
i1=0
print(i1)
type(i1)
for i2 in json_data["list"]:
# or:
# for i2 in range(len(son_data["list"])):
checkID=json_data["list"][i1]["product_id"]
# or:
# checkID=i2["product_id"] # then you don't even need i1
print(checkID)
i1=i1+1