Извлечение / очистка определенных данных из файла JSON - PullRequest
1 голос
/ 06 октября 2011

Это беспокоило меня довольно много часов. Я много искал и нашел много информации. Проблема в том, что я не настолько хорош, я на самом деле начинающий до максимума. Я хотел бы добиться этого с помощью 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

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

Marvin

Ответы [ 4 ]

3 голосов
/ 06 октября 2011

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}\n\n'.format(**elem['metadata']))
2 голосов
/ 06 октября 2011

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

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 '%s\n%s\n%s\n' % (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('%s\n%s\n%s\n' % (artist, album, songTitle))
2 голосов
/ 06 октября 2011

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

например. array ['first'] = 'hello'; массив ['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, это может очистить одну или две вещи.

1 голос
/ 06 октября 2011

Для 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, поэтому вам придетсяитерация адекватно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...