Извлечение / очистка определенных данных из файла JSON

#php #javascript #jquery #python

#php #javascript #jquery #python

Вопрос:

Это беспокоило меня уже несколько часов. Я много искал и нашел много информации. Проблема в том, что я не настолько хорош, я на самом деле новичок по максимуму. Я бы хотел добиться этого с помощью Python (если это возможно!). Может быть, с помощью JavaScript и PHP также? Позвольте мне объяснить.

Я только что нашел этот веб-сайт http://listeningroom.net и это здорово. Вы можете создавать / объединять комнаты, загружать треки и слушать их вместе с друзьями.

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

http://listeningroom.net/room/chillasfuck/spins.json Файл .json содержит треки, сыгранные за последние 24 часа.

Мне удалось очистить все .файл json с помощью Python после просмотра (локальный .файл json) со следующим, вероятно, не очень корректным кодом.

    json_data=open('...spins.json')

   data = json.load(json_data)
   pprint(data)

   json_data.close()
  

При этом выводится следующее:

    [{u'endTime': u'1317752614105',
   u'id': u'cf37894e8eaf886a0d000000',
   u'length': 492330,
   u'metadata': {u'album': u'Mezzanine',
            u'artist': u'Massive Attack',
            u'bitrate': 128000,
            u'label': u'Virgin',
            u'length': 17494.479054779807,
            u'title': u'Group Four'},
  

Просто часть печати

1. Я хотел бы извлечь их из URL-адреса (указанного вверху) 2. Просто введите «альбом», «исполнитель» и «название» 3. Убедитесь, что он печатает его как можно проще, например:

 Artist
Track title
Album

Artist
Track title
Album
  

4. Если это не слишком много, сохраните его в .txt-файл

Я надеюсь, что смогу получить некоторую помощь, я действительно хочу создать это для себя, чтобы я мог посмотреть больше музыки!

Марвин

Комментарии:

1. После загрузки json у вас есть словарь. Насколько сложно может быть получить доступ data['metadata']['artist'] и к другим?

2. Да, извините за логин, забыл об этом. И JBernardo, спасибо. Я новичок в Python, и ваш ответ великолепен. Это работает безупречно. Я уже интересовался Python, но после вашего ответа я даже заинтересовался. Это кажется таким простым. Еще раз спасибо!

Ответ №1:

Python (после загрузки json)

 for elem in data:
    print('{artist}n{title}n{album}n'.format(**elem['metadata']))
  

Для сохранения в файле:

 with open('the_file_name.txt','w') as f:
    for elem in data:
        f.write('{artist}n{title}n{album}nn'.format(**elem['metadata']))
  

Ответ №2:

Вы уже очень близки.

data = json.load(json_data)

берет строку JSON и преобразует ее в объект Python — в данном случае в список словарей (плюс «метаданные», которые представляют собой словарь словарей).

Чтобы перевести это в нужный вам формат, вам просто нужно перебрать элементы.

 for song in data:
    artist = song['metadata']['artist'] # This tells it where to look in the dictionary. It's looking for the dictionary item called 'metadata'. Then, looking inside that dictionary for 'artist'.
    album = song['metadata'['album']
    songTitle = song['metadata']['title']
    print '%sn%sn%sn' % (artist, album, songTitle)
  

Или, чтобы распечатать его в файл:

 with open('the_file_name.txt','w') as f:
    for song in data:
        artist = song['metadata']['artist']
        album = song['metadata'['album']
        songTitle = song['metadata']['title']
        f.write('%sn%sn%sn' % (artist, album, songTitle))
  

Ответ №3:

Хорошо, это немного коротко, но особенность json в том, что он преобразует массив в строку

например. array[‘first’] = ‘привет’; array [‘second’] = ‘там’;

станет [{u’first’: u’hello’, u’second’: ‘there’}]; после jsonencode запустите это жало через jsondecode, и вы получите свой массив обратно

итак, просто запустите файл json с помощью декодера, и тогда вы сможете получить доступ к своим данным через:

 array['metadata'].album
array['metadata'].artist
...
  

никогда не использовал python, но он должен быть таким же.

взгляните на http://www.php.net/manual/en/function.json-decode.php это могло бы прояснить одну или две вещи.

Ответ №4:

Для PHP вам нужен json.decode

 <?php
      $json = file_get_contents($url);
      $val = json_decode($json);
      $room = $val[0]->metadata;
echo "Album : ".$room->album."n";
echo "Artist : ".$room->artist."n";
echo "Title : ".$room->title."n";
?>
  

Выводит

 Album  :  Future Sandwich
Artist :  Them, Roaringtwenties
Title  :  Fast Acting Nite-Nite Spray With Realistic Uncle Beard
  

Обратите внимание, что там слишком много данных в формате JSON, поэтому вам придется выполнять соответствующие итерации

Комментарии:

1. Потрясающе, спасибо. У меня уже есть решение на Python, но я обязательно попробую это.