2016-08-20 39 views
0

我有两个JSON文件 - 包含发布者和书籍列表的发布者,其中包含书籍列表。我必须将本书与相应的出版商进行匹配。这两个文件是格式如下:在两个JSON文件中查找匹配记录的最佳方法

books.json(约400书籍):

[{"bookId":"1173828", "bookName":"Dark Sky", "publisher":"ABC", "publisherCountry":"USA"}, ...] 

publishers.json(约10出版商);

[{"publisherId":"128", "publisherName":"ABC", "publisherCountry":"USA"}, ...] 

输出应该是这样的形式:

{"results": [{ "bookId": "1173828", "publisherId": 128}, ...]} 

我使用JSON杰克逊解析的文件。我想知道什么是最好的方法来使用这个问题。我应该为每条记录创建单独的对象,然后比较Book和Publisher类的对象以找到匹配项?

回答

0

如果这是你对数据解决只有问题,最快的方法是:

  1. 解析所有的出版商,并存储ID(或任何其他附加信息,你想以保持输出)在散列映射中,其中发布者名称是关键字。如果要匹配姓名和国家/地区,则可以使用<publisherName>/<publisherCountry>这样的密钥,如果您自然使用的分隔符不会在数据中出现,则效果最佳。例如<publisherName>\n<publisherCountry>,因为我认为这些名称中存在换行符。

  2. 现在解析所有书籍,从数据构造密钥,例如,再次<publisher>\n<publisherCountry>,并查看你的散列。现在您可以按照您需要的方式输出所有字段。

0

你基本上做一个内部联接基础上,发布者名称图书,而出版商之间。 您可以使用关联数组(或散列图)为发布者和书籍创建索引。这会将一个唯一的关键字(比如出版商名称)与每个出版商和书籍关联起来。索引创建完成后,您可以通过遍历键和合并数据来完成do之间的内部联接。

这里是用Python的范例:

import json 

with open('books.json') as f: 
    books = json.load(f) 

with open('publishers.json') as f: 
    publishers = json.load(f) 

books_index = { # 1 
    b['publisher']: { # 2 
     'bookId': b['bookId'], 
     'bookName': b['bookName'] 
    } 
    for b in books 
} 
publishers_index = { 
    p['publisherName']: { # 2 
     'publisherId': p['publisherId'], 
     'publisherName': p['publisherName'], 
     'publisherCountry': p['publisherCountry'] 
    } 
    for p in publishers 
} 

joined = [ 
    dict(books_index[k], **publishers_index[k]) # 3 
    for k in books_index.keys() 
] 

results = { 
    'results': joined 
} 

注:

  1. 这种语法称为理解,你可以用它来简单地在一个表达式创建包含HashMap或列表。 Python的hashmaps被称为字典。
  2. 这是您为每本图书/出版商选择唯一密钥的位置,以及相关的值。
  3. 这是您选择如何将书籍与发布者相关联的地方。在这里,我只是将本书和出版商的词典合并为一本。
相关问题