2011-10-05 163 views
1

这让我烦恼了好几个小时。我一直在寻找很多,我发现了很多信息。问题是,我不太好,我实际上是一个初学者。我想用Python实现这一点(如果可能的话!)。也许用JavaScript和PHP也可以?让我解释。从JSON文件中提取/刮取特定数据

我刚刚发现这个网站http://listeningroom.net,它很棒。您可以创建/加入房间并上传曲目,并与朋友一起收听。

我想从.json文件中提取/刮取/获取某些特定数据。 此文件包含艺术家专辑标题曲目标题以上。我只想提取艺术家,专辑和曲目标题。

http://listeningroom.net/room/chillasfuck/spins.json.json文件包含过去24小时播放的曲目。

我设法用Python查看整个.json文件后((本地.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'}, 

刚刚打印的一部分

我想从一个URL(提供的一个刮它顶部) 2.刚刚获得'专辑','艺术家'和'标题' 3.确保它打印它尽可能简单,像这样:

Artist 
Track title 
Album 

Artist 
Track title 
Album 

4.如果它不是太多,将其保存为.txt文件

我希望我能得到一些帮助,我真的想为自己创造这个,所以我可以看看更多的音乐!

马文

+0

它的第一个说登录。 – Mob

+0

加载json之后,您已经收藏了一本字典。访问数据['元数据'] ['艺术家']和其他人有多难? – JBernardo

+0

是的,抱歉的登录,忘记了。 和JBernardo,谢谢。我是Python新手,你的答案很好。它完美无瑕。我已经对Python感兴趣,但在你回答之后,我甚至变得更感兴趣。看起来很简单。再次感谢! – 6olden

回答

3

的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

好吧,这是有点短,但有关JSON的事情是,它转换一个数组转换成字符串

如。 array ['first'] ='hello'; array ['second'] ='there';

将成为 [{u'first':u'hello',u'second':'there'}]; 一个jsonencode 运行该蜇THROU jsondecode后,你会得到你的阵列回来

所以干脆运行你的JSON文件你一个解码器,然后你应该能够通过到达您的数据:

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

从来没有使用Python,但它应该是相同的。

看看http://www.php.net/manual/en/function.json-decode.php它可能清除UPP一两件事。

1

对于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数据卡车负载,所以你必须充分迭代

+0

太棒了,谢谢。我已经有了Python解决方案,但我会一直尝试。 – 6olden

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 '%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))