Python:如何轻松提取/存储json的各种值

时间:2017-04-17 13:07:34

标签: python json

我有以下类型的"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'); } 信息?

4 个答案:

答案 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