2014-11-01 3 views
1

Моя конечная цель - разобрать данные JSON из вызова API в CSV-файл. Я использую образец кода для Yelp API http://www.yelp.com/developers/documentation/v2/examples. Лучшее, что я получил, это записать данные в CSV-файл, но это не очень красиво. Я считаю, что мне не хватает ввода данных в словарь Python, но я исследовал и пробовал несколько подходов, которые ни к чему не привели.Импорт данных JSON в формат CSV

try: 
    CSVfile = open('C:\Users\Petr Fedorov\Desktop\YelpAPI.csv', "wb") 
    response = json.dump(conn.read(),CSVfile,sort_keys=True) 
    #response = json.loads(conn.read()) #this is the original code under try: 

finally: 
    conn.close() 
    CSVfile.close() 

return response 

Я просмотрел следующие сообщения, но не смог принять их подход к этому.

Parsing values from a JSON file using Python? How do I write JSON data to a file in Python? Creating a JSON response using Django and Python

Ваше время и усилия в предоставлении кода или направляет меня в правильном направлении очень ценятся.

Вот пример вывода с исходным кодом ... ответ = json.loads (conn.read())

Result for business "affordable-interior-design-new-york" found: 
{ u'categories': [[u'Interior Design', u'interiordesign']], 
    u'display_phone': u'+1-917-686-1319', 
    u'id': u'affordable-interior-design-new-york', 
    u'image_url': u'http://s3-media1.fl.yelpcdn.com/bphoto/taBV7OM7mNyS_pQD7ifSVw/ms.jpg', 
    u'is_claimed': True, 
    u'is_closed': False, 
    u'location': { u'address': [], 
       u'city': u'New York', 
       u'coordinate': { u'latitude': 40.7376543584561, 
            u'longitude': -74.0053272269531}, 
       u'country_code': u'US', 
       u'display_address': [u'West Village', u'New York, NY 10014'], 
       u'geo_accuracy': 9.5, 
       u'neighborhoods': [u'West Village'], 
       u'postal_code': u'10014', 
       u'state_code': u'NY'}, 
    u'mobile_url': u'http://m.yelp.com/biz/affordable-interior-design-new-york', 
    u'name': u'Affordable Interior Design', 
    u'phone': u'9176861319', 
    u'rating': 5.0, 
    u'rating_img_url': u'http://s3-media1.fl.yelpcdn.com/assets/2/www/img/f1def11e4e79/ico/stars/v1/stars_5.png', 
    u'rating_img_url_large': u'http://s3-media3.fl.yelpcdn.com/assets/2/www/img/22affc4e6c38/ico/stars/v1/stars_large_5.png', 
    u'rating_img_url_small': u'http://s3-media1.fl.yelpcdn.com/assets/2/www/img/c7623205d5cd/ico/stars/v1/stars_small_5.png', 
    u'review_count': 10, 
    u'reviews': [ { u'excerpt': u'Classes are structured in a very practical manner. It sets up a basic layout and gives you a foundation about what to take care of step-by-step.\nAnd yes,...', 
        u'id': u'Vu5-xvjUII0wCV3Q-1vz8w', 
        u'rating': 4, 
        u'rating_image_large_url': u'http://s3-media2.fl.yelpcdn.com/assets/2/www/img/ccf2b76faa2c/ico/stars/v1/stars_large_4.png', 
        u'rating_image_small_url': u'http://s3-media4.fl.yelpcdn.com/assets/2/www/img/f62a5be2f902/ico/stars/v1/stars_small_4.png', 
        u'rating_image_url': u'http://s3-media4.fl.yelpcdn.com/assets/2/www/img/c2f3dd9799a5/ico/stars/v1/stars_4.png', 
        u'time_created': 1324256900, 
        u'user': { u'id': u'r9ecgI5mnHgPo4W0fPRqPA', 
          u'image_url': u'http://s3-media4.fl.yelpcdn.com/photo/kcsQCRHtTmZcwPtE7_aeAQ/ms.jpg', 
          u'name': u'Wendy G.'}}], 
    u'snippet_image_url': u'http://s3-media4.fl.yelpcdn.com/assets/2/www/img/cc4afe21892e/default_avatars/user_medium_square.png', 
    u'snippet_text': u'So much more than I could have hoped for. Betsy is fun, funny, and REALLY good at Interior Design.\n\nThe 3 hour plan was perfect.', 
    u'url': u'http://www.yelp.com/biz/affordable-interior-design-new-york'} 
+1

Моя первая рекомендация будет * не * сериализоваться в CSV, если у вас есть выбор. JSON - это совершенно сложный формат сериализации. Если вам это не удастся, вам нужно будет разместить образец ввода и желаемый результат; нет универсального отображения из JSON-> CSV, поскольку JSON поддерживает произвольно вложенные структуры, а CSV - нет. – roippi

+0

@roippi Я хотел бы выводить в CSV, потому что это будет конечный пункт назначения данных. Я добавил вывод для исходного кода. Любые рекомендации приветствуются. Как я уже упоминал, я полный newb для Python. Я кодирую некоторые вещи в VBA, но об этом, поэтому я полностью потерялся в таких вещах, как JSON, словари, конверсии и т. Д. Еще раз спасибо за любые рекомендации. –

+0

json - это вложенная структура данных, а файлы csv обычно плоские - (если вы не хотите повторять столбцы) - вы уверены, что вам нужен csv? –

ответ

1

На самом деле, ваш ответ уже словарь питона. Одна вещь, которую вы можете сделать, это использовать get put данные в объекте pandas DataFrame. Затем выведите на csv.

Вы можете сделать это прямо из строки JSon

import pandas as pd 
df = pd.read_json(conn.read()) 

Или вы можете сделать это из словаря питона.

df = pd.from_dict(response) 

Затем вы можете вывести его в формате CSV

df.to_csv('file.csv') 

Одной из проблем является то, что реакция у вас есть более чем на 1 уровень. Другими словами, есть вложенные словари. Вам нужно что-то в этом формате

r = {'a': [list], 'b': [list] , 'c': value, 'd':value} 

Другими словами, значения не могут быть словарями. Это означает, что вам все равно придется манипулировать данными словаря, чтобы сначала получить его в правильной форме, выбрав некоторые части данных.

Смежные вопросы