2012-11-23 13 views
8

यहाँ के साथ एक json डेटा वस्तु बनाने के लिए Google बिगक्वेरी से अपने डेटा पार्स करने के लिए है:पार्सिंग डेटा अजगर

{ 
    u'kind': u'bigquery#queryResponse', 
    u'rows': [ 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'995' 
       }, 
       { 
        u'v': u'1600' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'942' 
       }, 
       { 
        u'v': u'1607' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'937' 
       }, 
       { 
        u'v': u'1599' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'894' 
       }, 
       { 
        u'v': u'1598' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'848' 
       }, 
       { 
        u'v': u'1592' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'841' 
       }, 
       { 
        u'v': u'1590' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'786' 
       }, 
       { 
        u'v': u'1603' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'779' 
       }, 
       { 
        u'v': u'1609' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'762' 
       }, 
       { 
        u'v': u'1597' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'753' 
       }, 
       { 
        u'v': u'1594' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'740' 
       }, 
       { 
        u'v': u'1596' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'738' 
       }, 
       { 
        u'v': u'1612' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'718' 
       }, 
       { 
        u'v': u'1590' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'717' 
       }, 
       { 
        u'v': u'1610' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'715' 
       }, 
       { 
        u'v': u'1602' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'680' 
       }, 
       { 
        u'v': u'1606' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'674' 
       }, 
       { 
        u'v': u'1603' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'639' 
       }, 
       { 
        u'v': u'1603' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'637' 
       }, 
       { 
        u'v': u'1603' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'634' 
       }, 
       { 
        u'v': u'1590' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'633' 
       }, 
       { 
        u'v': u'1599' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'616' 
       }, 
       { 
        u'v': u'1596' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'614' 
       }, 
       { 
        u'v': u'1596' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'612' 
       }, 
       { 
        u'v': u'1595' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'607' 
       }, 
       { 
        u'v': u'1603' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'579' 
       }, 
       { 
        u'v': u'1593' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'570' 
       }, 
       { 
        u'v': u'1600' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'541' 
       }, 
       { 
        u'v': u'1599' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'525' 
       }, 
       { 
        u'v': u'1608' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'520' 
       }, 
       { 
        u'v': u'1599' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'518' 
       }, 
       { 
        u'v': u'1602' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'486' 
       }, 
       { 
        u'v': u'1595' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'470' 
       }, 
       { 
        u'v': u'1593' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'433' 
       }, 
       { 
        u'v': u'1609' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'429' 
       }, 
       { 
        u'v': u'1607' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'421' 
       }, 
       { 
        u'v': u'1611' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'399' 
       }, 
       { 
        u'v': u'1592' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'363' 
       }, 
       { 
        u'v': u'0' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'353' 
       }, 
       { 
        u'v': u'1594' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'287' 
       }, 
       { 
        u'v': u'1609' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'106' 
       }, 
       { 
        u'v': u'0' 
       } 
      ] 
     }, 
     { 
      u'f': [ 
       { 
        u'v': u'the' 
       }, 
       { 
        u'v': u'57' 
       }, 
       { 
        u'v': u'1609' 
       } 
      ] 
     } 
    ], 
    u'jobReference': { 
     u'projectId': u'670640819051', 
     u'jobId': u'job_5bf745fcee8b470e997d8ea90f380e68' 
    }, 
    u'jobComplete': True, 
    u'totalRows': u'42', 
    u'schema': { 
     u'fields': [ 
      { 
       u'type': u'STRING', 
       u'name': u'word', 
       u'mode': u'NULLABLE' 
      }, 
      { 
       u'type': u'INTEGER', 
       u'name': u'word_count', 
       u'mode': u'NULLABLE' 
      }, 
      { 
       u'type': u'INTEGER', 
       u'name': u'corpus_date', 
       u'mode': u'NULLABLE' 
      } 
     ] 
    } 
} 

एक अजगर newbee होने के नाते, मैं वास्तव में कैसे बनाने के लिए इस डेटा पार्स करने के बारे में जाने के लिए के बारे में पता नहीं है नीचे एक जेसन ऑब्जेक्ट:

[ 
    {'count': 200, 'year': 2008}, 
    {'count': 240, 'year': 2010}, 
    {'count': 290, 'year': 2009} 
] 

क्या कोई मुझे शुरू करने के तरीके के बारे में कोई संकेत दे सकता है?

उदाहरण

[{u'v': u'the'}, {u'v': u'995'}, {u'v': u'1600'}] 
शब्द 'the' के लिए

इस में, count 995 है और year 1600 है और इसलिए यह इस प्रकार है।

+1

हाय, कहाँ है "वर्ष" और "गिनती" से आता है? – andrefsp

+0

मैंने अभी अपडेट किया है – iJade

+0

अपने उदाहरण में, आप कैसे पहचान रहे हैं कि '{u'v': u'995 '} '' count' का प्रतिनिधित्व करता है और '{u'v': u'1600 '}' ' year'? अनुक्रम में सूचकांक द्वारा –

उत्तर

27

यदि 'ज़ेड' आपका बड़ा शब्दकोश है, तो 'प्रतिक्रिया' पर आपको वह संरचना मिल जाएगी जो आपको चाहिए।

import json 

response = [] 
for row in z['rows']: 
    for key, dict_list in row.iteritems(): 
     count = dict_list[1] 
     year = dict_list[2] 
     response.append({'count': count['v'], 'year' : year['v']}) 

print json.dumps(response) 

प्रतिक्रिया पर आप निम्न प्राप्त होगा:

[{'count': u'995', 'year': u'1600'}, 
{'count': u'942', 'year': u'1607'}, 
{'count': u'937', 'year': u'1599'}, 
{'count': u'894', 'year': u'1598'}, 
{'count': u'848', 'year': u'1592'}, 
{'count': u'841', 'year': u'1590'}, 
{'count': u'786', 'year': u'1603'}, 
{'count': u'779', 'year': u'1609'}, 
{'count': u'762', 'year': u'1597'}, 
{'count': u'753', 'year': u'1594'}, 
{'count': u'740', 'year': u'1596'}, 
{'count': u'738', 'year': u'1612'}, 
{'count': u'718', 'year': u'1590'}, 
{'count': u'717', 'year': u'1610'}, 
{'count': u'715', 'year': u'1602'}, 
{'count': u'680', 'year': u'1606'}, 
{'count': u'674', 'year': u'1603'}, 
{'count': u'639', 'year': u'1603'}, 
{'count': u'637', 'year': u'1603'}, 
{'count': u'634', 'year': u'1590'}, 
{'count': u'633', 'year': u'1599'}, 
{'count': u'616', 'year': u'1596'}, 
{'count': u'614', 'year': u'1596'}, 
{'count': u'612', 'year': u'1595'}, 
{'count': u'607', 'year': u'1603'}, 
{'count': u'579', 'year': u'1593'}, 
{'count': u'570', 'year': u'1600'}, 
{'count': u'541', 'year': u'1599'}, 
{'count': u'525', 'year': u'1608'}, 
{'count': u'520', 'year': u'1599'}, 
{'count': u'518', 'year': u'1602'}, 
{'count': u'486', 'year': u'1595'}, 
{'count': u'470', 'year': u'1593'}, 
{'count': u'433', 'year': u'1609'}, 
{'count': u'429', 'year': u'1607'}, 
{'count': u'421', 'year': u'1611'}, 
{'count': u'399', 'year': u'1592'}, 
{'count': u'363', 'year': u'0'}, 
{'count': u'353', 'year': u'1594'}, 
{'count': u'287', 'year': u'1609'}, 
{'count': u'106', 'year': u'0'}, 
{'count': u'57', 'year': u'1609'}] 

मेरा मानना ​​है कि अपने आप क्या जरूरत है। केवल json का उपयोग करें और प्रतिक्रिया के लिए json.dumps करें और यही वह है।

+1

एक टाइपो respone = [] प्रतिक्रिया होना चाहिए = [] –

+1

@ केजी धन्यवाद। मैंने सही किया। – andrefsp

4

आप मॉड्यूल जेसन का उपयोग कर आसानी से पाइथन ऑब्जेक्ट्स जेएसओएन ऑब्जेक्ट्स और वाइसवर्सा में परिवर्तित कर सकते हैं। मूल रूप से केवल 2 वर्ग हैं: JSONEncoder और JSONDecoder: पहला जेसन स्ट्रिंग्स में पाइथन संग्रह बदलता है, दूसरा एक पायथन ऑब्जेक्ट में JSON स्ट्रिंग होता है।

उदाहरण:

from json import JSONEncoder 

jsonString = JSONEncoder().encode({ 
    "count": 222, 
    "year": 2012 
}) 

कोड के ऊपर एक अजगर शब्दकोश से JSON स्ट्रिंग

from json import JSONDecoder 

pyDictionary = JSONDecoder().decode('{"count": 222, "year": 2012}') 

कोड ऊपर JSON स्ट्रिंग

0

संस्करण 0.28.0 से एक अजगर शब्दकोश उत्पन्न होगा उत्पन्न होगा और बाद में google-cloud-bigquery library किसी तालिका या क्वेरी से पंक्तियों को पार्स करने के लिए कक्षा का उपयोग करें।

एक स्कीमा के साथ एक प्रश्न से परिणाम बाहर मुद्रित करने के लिए उदाहरण

[ 
    { 
     u'type': u'STRING', 
     u'name': u'word', 
     u'mode': u'NULLABLE' 
    }, 
    { 
     u'type': u'INTEGER', 
     u'name': u'word_count', 
     u'mode': u'NULLABLE' 
    }, 
    { 
     u'type': u'INTEGER', 
     u'name': u'corpus_date', 
     u'mode': u'NULLABLE' 
    }, 
] 

अपने उदाहरण के रूप में, एक

query = client.query('...') 
rows = query.result() 
for row in rows: 
    # Access by column index. 
    print('word: {}'.format(row[0])) 
    # Access by column name. 
    # The library parses the result into an integer object, 
    # based on the schema. 
    print('word_count: {}'.format(row['word_count'])) 
    # Access by column name, like an attribute. 
    print('corpus_date: {}'.format(row.corpus_date)) 

संस्करण 0.29.0 में कर सकता है के लिए (अभी तक 2017- के रूप में जारी नहीं 12-04), keys(), values(), items(), और get() के लिए विधियों में एक अंतर्निहित शब्दकोश ऑब्जेक्ट की तरह विधियां होंगी। (PR #4393 में जोड़ा गया) तो, 0.29.0 में एक JSON की तरह शब्दकोश में पंक्तियों कन्वर्ट करने के लिए:

query = client.query('...') 
rows = query.result() 
for row in rows: 
    row_json = dict(row.items()) 
संबंधित मुद्दे