我正在从伪xml格式文件创建json文件。但是我不想在json对象之间得到逗号。
这是我得到的样本:
[{"a": a , "b": b } , {"a": a , "b": b }]
但是我想要这个:
{"a": a , "b": b } {"a": a , "b": b }
它可能不是有效的json,但是我希望这样做,以便可以通过以下操作将其改组:
shuf -n 100000 original.json > sample.json
否则,它将只是json的一大行
这是我的代码:
def read_html_file(file_name):
f = open(file_name,"r", encoding="ISO-8859-1")
html = f.read()
parsed_html = BeautifulSoup(html, "html.parser")
return parsed_html
def process_reviews(parsed_html):
reviews = []
for r in parsed_html.findAll('review'):
review_text = r.find('review_text').text
asin = r.find('asin').text
rating = r.find('rating').text
product_type = r.find('product_type').text
reviewer_location = r.find('reviewer_location').text
reviews.append({
'review_text': review_text.strip(),
'asin': asin.strip(),
'rating': rating.strip(),
'product_type': product_type.strip(),
'reviewer_location': reviewer_location.strip()
})
return reviews
def write_json_file(file_name, reviews):
with open('{f}.json'.format(f=file_name), 'w') as outfile:
json.dump(reviews, outfile)
if __name__ == '__main__':
parser = optparse.OptionParser()
parser.add_option('-f', '--file_name',action="store", dest="file_name",
help="name of the input html file to parse", default="positive.html")
options, args = parser.parse_args()
file_name = options.file_name
html = read_html_file(file_name)
reviews_list = process_reviews(html)
write_json_file(file_name,reviews_list)
第一个[]是由于reviews = []
引起的,我可以手动将其删除,但是我也不想在json对象之间使用逗号。
答案 0 :(得分:4)
您要的不是JSON 。根据定义,The standards指定对象之间必须有逗号。您可以选择两种选择:
答案 1 :(得分:1)
在您的问题上有几个概念混在一起!
1。您所拥有的不是dict
的{{1}},而是list
的{{1}}。
2。您的输入元素dicts
或预期的输出中都没有JSON
现在要寻求解决方案,如果您只想list
而不用print
分离对象,那么只需要comma
所有元素列表,您可以做什么:
print
现在,如果您真正想要的是将其作为JSON对象进行操作,则可以使用sample = [{"a": "a" , "b": "b" } , {"a": "a" , "b": "b" }]
print(" ".join([str(element) for element in sample]))
lib来选择两个选项:
json
中的每个元素添加为Json并分别进行操作它们已经被格式化为Json,因此您可以使用sample
lib对其进行操作,以将其漂亮地打印(json
)作为字符串或任何其他操作:
dumps
您可以将所有元素添加到单个import json
for element in sample:
print(json.dumps(element, indent = 4))
中,比方说添加到名为key
的{{1}}中,
key
或者您可以将每个元素添加到不同的elements
中。例如,我将创建一个计数器,该计数器的每个数字将为该特定的sample_json = {"elements": []}
for data in sample:
sample_json["elements"].append(data)
# Output from sample_json
# {'elements': [{'a': 'a', 'b': 'b'}, {'a': 'a', 'b': 'b'}]}
定义一个不同的key
:
key
对于第二种情况,您也可以使用文本element
。