2016-08-20 149 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. 這是您選擇如何將書籍與發佈者相關聯的地方。在這裏,我只是將本書和出版商的詞典合併爲一本。
相關問題