我有两个JSON Files- Publishers,其中包含一个包含图书清单的发布者和图书列表。我必须将该书与相应的出版商相匹配。这两个文件采用以下格式:
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}, ...]}
我使用Jackson JSON来解析文件。我想知道什么是用于此问题的最佳方法。我应该为每条记录创建单独的对象,然后比较Book和Publisher类的对象以找到匹配项吗?
答案 0 :(得分:0)
如果这是您必须解决的唯一问题,最快的方法是:
解析所有发布者,并将ID(或您希望保留的任何其他附加信息)存储在哈希映射中,其中发布者名称是密钥。如果要匹配名称和国家/地区,可以使用<publisherName>/<publisherCountry>
之类的密钥,如果数据中没有自然使用的分隔符,则效果最佳。例如<publisherName>\n<publisherCountry>
,我认为这些名称中有换行符。
现在解析所有书籍,从数据构建密钥,例如再次<publisher>\n<publisherCountry>
,并在你的哈希中查找。现在,您可以按照需要的方式输出所有字段。
答案 1 :(得分:0)
您基本上是根据发布商名称在图书和发布商之间进行内部联接。 您可以使用关联数组(或hashmap)创建发布者和书籍的索引。这会将唯一键(例如,发布者名称)与每个发布者和书籍相关联。创建索引后,您可以通过迭代键并将数据合并在一起来完成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
}
注意: