使用Python提取JSON属性并过滤掉一些数据

时间:2015-01-04 15:55:33

标签: python json urllib2

JSON文件:http://media1.clubpenguin.com/play/en/web_service/game_configs/paper_items.json 我使用的是Python 2。

我正在尝试提取所有' paper_item_id'来自JSON文件(如上所述),使用循环并存储' paper_item_id'在' item_id'变量,所以每次循环迭代到' paper_item_id'时这个变量都会改变,但是我想要一个if语句检查' paper_item_id'在JSON文件中' is_bait'是真的'如果是真的那么< item_id'变量不会存储' paper_item_id'其中有一个' is_bait'是真的,继续下一个。

步骤1)获取JSON数据 第2步)过滤掉' paper_item_id' ' is_bait'' is_bait'为真。
步骤3)运行一个循环,分配一个' item_id'变量为' paper_item_id'收到。
步骤4)循环应该运行,以便所有过滤的' paper_item_id' (item_id)已传递给' myFunction'

样本英语代码:

    foreach ('don't know what to have for the loop cond') {
        item_id = 'paper_item_id'
        if (item_id[is_bait]) == true  {
            code which will go to the end of the loop    
        }

        else 
        {
        myFunction(item_id)
        }

我知道这有一种Javascript类型的语法,但我想在python中使用它。

我现在拥有的:

import json
import urllib2
url = 'http://media1.clubpenguin.com/play/en/web_service/game_configs/paper_items.json'
result = json.loads(url)
request = urllib2.Request(url)
response = urllib2.urlopen(request)
json_obj = json.load(response)

我该怎么知道?

3 个答案:

答案 0 :(得分:2)

我已经使用了requests.get,并且还检查了有效的HTTP响应。

这是我的示例代码:

import json
import requests

def myFunction(item):
    # do something here
    print item['paper_item_id']
    pass

json_obj = requests.get('http://media1.clubpenguin.com/play/en/web_service/game_configs/paper_items.json').json()


for item in json_obj:
    if 'is_bait' in item and item['is_bait'] == "1":
        # item['is_bait'] == "1", in case you ever get is_bait = "0" in your json response.
        print item['paper_item_id']
        continue
    else:
        myFunction(item)

答案 1 :(得分:1)

以下是您作为伪代码提供的内容的翻译:

import json
import urllib2
url = 'http://media1.clubpenguin.com/play/en/web_service/game_configs/paper_items.json'
result = json.loads(url)
request = urllib2.Request(url)
response = urllib2.urlopen(request)
json_obj = json.load(response)
for item in json_obj:
    if "is_bait" in item and item['is_bait']:
        continue
    else:
        # do stuff

如果您反转条件,则可以跳过继续。

答案 2 :(得分:0)

json.load会根据需要将您的数据读入字典列表。在那之后,你可以使用标准的python对象操作来过滤你想要的任何东西:

import json
import urllib2
url = 'http://media1.clubpenguin.com/play/en/web_service/game_configs/paper_items.json'
result = json.load(url)
request = urllib2.Request(url)
response = urllib2.urlopen(request)
json_obj = json.load(response)

您的问题是您正在将URL对象作为字符串读取,并且这是一个非首发。我修改了上面的代码,它现在读取了整个内容(下面输出的代码段:

 {u'cost': 0,
  u'is_bait': u'1',
  u'is_member': Terue,
  u'label': u"Stompin' Bob Fowhawk Hair",
  u'layer': 6000,
  u'paper_item_id': 1274,
  u'prompt': u"Stompin' Bob Fowhawk Hair",
  u'type': 2},
 {u'cost': 0,
  u'is_bait': u'1',
  u'is_member': True,
  u'label': u'G Billy Hair and Bandana',
  u'layer': 6000,
  u'paper_item_id': 1275,
  u'prompt': u'G Billy Hair and Bandana',
  u'type': 2},
  ... continues for a long time...